fundindo duplicados hashmap parciais de novo matrizes em Java

Haruki:

Eu tenho Stream<Map<String, String>>onde cada mapa é como um disco separado e contém duas entradas:

  1. Id carro ( "ID", "1003")
  2. Quilômetros ( "KMI", "500")

Esta lista pode conter mapas que são duplicados de uma forma que 2 ou mais mapas poderia ter o mesmo valor de entrada id carro. Basicamente isto: entry1.get ( "ID") == entry2.get ( "ID"). o que eu quero fazer é remover mapas com ids duplicados, mas depois também para mesclar valores KMI juntos. esta:

{ "ID": "1003", "KMI": "500"}, { "ID": "1003", "KMI": "400"}, { "ID": "1004", "KMI":" 200" }

deve tornar-se o seguinte:

{ "Id": "1003", "KMI": "900"}, { "id": "1004", "KMI": "200"}

Eu tentei fazê-lo com correntes API só, mas eu não pode envolver minha cabeça em torno deste. Eu tentei modificar um exemplo semelhante que estava tendo Lista de objetos aqui é o que eu tenho até agora:

List<Map<String, String>> result = new ArrayList<>(
    queryKmAll.collect(
        Collectors.toMap(a1 -> a1.get("ID")), Function.identity(), (Map<String, String> m2, Map<String, String> m1) -> {
            m1.put("KMI", String.valueOf(Double.parseDouble(m1.get("KMI")) + Double.parseDouble(m2.get("KMI"))));

            return m1;
        })
    )
);
Ashishkumar Singh:

Eu peguei de onde OP esquerda. Eu modifiquei o seu um pouco de lógica para retornar o que você queria. Ter um olhar para ele. Espero que ajude

Collectors.toMap retornará um mapa que terá IDcomo chave e sum of KMIde Function.identity()casos. Assim, o retorno seria Map<Object,Map<String,String>>. Porque resultado esperado é Stream<Map<String,String>, I adicionado .values().stream().

Stream<Map<String, String>> result = queryKmAll.collect(Collectors.toMap(a1 -> a1.get("ID"),
            Function.identity(), (Map<String, String> m2, Map<String, String> m1) -> {
                m1.put("KMI",
                        String.valueOf(Double.parseDouble(m1.get("KMI")) + Double.parseDouble(m2.get("KMI"))));

                return m1;
            })).values().stream();

result.forEach(System.out::println);

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=236486&siteId=1
Recomendado
Clasificación