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!
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.