la fusión de los duplicados HashMap parciales a new ArrayList en Java

Haruki:

Tengo Stream<Map<String, String>>Cada mapa es como un registro separado y contiene dos entradas:

  1. Id coche ( "ID", "1003")
  2. Kilómetros ( "KMI", "500")

Esta lista puede contener mapas que son duplicados de una manera que 2 o más mapas pueden tener el mismo valor de entrada Identificación del coche. Básicamente esto: entry1.get ( "ID") == entry2.get ( "ID"). lo que quiero hacer es quitar mapas con identificadores duplicados, pero luego también para combinar los valores de KMI juntos. esta:

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

debe convertirse en esto:

{ "ID": "1003", "KMI": "900"}, { "ID": "1004", "KMI": "200"}

He tratado de hacerlo con corrientes API solo, pero no puedo envolver mi cabeza alrededor de esto. He intentado modificar un ejemplo similar que estaba teniendo Lista de objetos aquí es lo que tengo hasta ahora:

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:

He recogido desde donde dejó OP. He modificado un poco su lógica para devolver lo que quería. Échale un vistazo. Espero eso ayude

Collectors.toMap devolverá un mapa que tendrá IDcomo llave y sum of KMIde Function.identity()casos. Por lo que el retorno sería Map<Object,Map<String,String>>. Dado que la salida esperada es Stream<Map<String,String>, añadí .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);

Supongo que te gusta

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