Java 8 Streams - como mesclar elementos da lista com os mesmos campos para um elemento e resumir

Natley:

Eu tenho uma pergunta - eu tenho Lista de elementos A:

class A {
String fieldA;
int fieldB
}

Eu gostaria de unir todos os elementos com thr mesmo fieldA a um elemento com resumiu todos os valores de fieldB desta forma:

el1 = AAA 5
el2 = AAA 7
el3 = AAA 2

Resultado:

one element: AAA 14

Como posso fazer isso usando Java 8 Streams?

Então, no final minha lista tem de ter menos elementos do que no início. Eu tenho que encontrar todos os elementos com o mesmo fieldA e fundi-los a um elemento com resumiu fieldB.

Obrigado!

guerreiro brilhante:

Yo pode fazer alguma coisa como esta desde que a sua classe é mutável.

List<A> out = list.stream()
    .collect(Collectors
        .collectingAndThen(
            Collectors.toMap(ele -> ele.getFieldA(), Function.identity(), (a, b) -> {
              a.setFieldB(a.getFieldB() + b.getFieldB());
              return a;
            }), m -> new ArrayList<>(m.values())));

Neste, você primeiro será a criação de um mapa do tipo

Map<fieldA, A> 

tendo um (objecto) valor fieldB como soma de todos os valores do fieldB do correspondente valor fieldA, e em seguida simplesmente converter o conjunto valor de Mapa de lista.

Espero que ajude.

Acho que você gosta

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