Groupe par et la somme des objets, comme dans SQL avec Java lambdas?

J'ai une classe Foo avec ces champs:

id:int /nom;String /targetCost:BigDecimal /actualCost:BigDecimal

- Je obtenir une liste de tableaux, d'objets de cette classe. par exemple:

new Foo(1, "P1", 300, 400), 
new Foo(2, "P2", 600, 400),
new Foo(3, "P3", 30, 20),
new Foo(3, "P3", 70, 20),
new Foo(1, "P1", 360, 40),
new Foo(4, "P4", 320, 200),
new Foo(4, "P4", 500, 900)

J'ai envie de transformer ces valeurs en créant une somme de "targetCost" et "actualCost" et de regroupement de la "ligne" par exemple

new Foo(1, "P1", 660, 440),
new Foo(2, "P2", 600, 400),
new Foo(3, "P3", 100, 40),
new Foo(4, "P4", 820, 1100)

Ce que j'ai écrit maintenant:

data.stream()
       .???
       .collect(Collectors.groupingBy(PlannedProjectPOJO::getId));

Comment puis-je le faire?

OriginalL'auteur haisi | 2014-10-13