Mam Mapę list określonego obiektu i chcę dodać wszystkie elementy list na podstawie konkretnej zmiennej instancji.Java 8 - Jak podsumować cały element listy na mapie list
mojego obiektu:
class Risk{
Integer id, riskValue, totRisk=0;
String name;
Integer getId(){
return id;
}
Risk(Object[] result){
id=(Integer)result[0];
riskValue=(Integer)result[1];
name=(String)result[3];
}
}
uzyskać z bazy danych listę tablic Typ obiektu:
List<Object[]> results=getResults();
używam Java 8 do grupy moich danych przez ID, bo chcę SUMA przez riskValue
wszystkie obiekty typu Risk
o tym samym id
.
To co mam zrobić:
List<Risk> risks=results.stream().map(Risk::new).collect(Collectors.toList());
Map<Integer, List<Risk>> byId=risks.stream.collect(Collectors.groupingBy(Risk::getId));
W tym momencie mam wszystkie moje przedmioty ryzyka pogrupowane według ID. I chcę, dla każdej listy podsumować wszystkie obiekty przez riskValue
i mają łącznie w zmiennej totRisk
Jak obliczyć w zmiennej totRisk
sumy zmiennych riskValue
w każdym liście?
Uwaga1: Chcę to zrobić za pomocą Java 8, wiem, jak to zrobić, używając Java 7 i poniżej.
Uwaga 2: Możliwe, że można to zrobić za jednym razem, ponieważ nie trzeba najpierw grupować według identyfikatora. Co chcę osiągnąć, to zsumować wszystkie obiekty o tym samym ID w oryginalnym List<Object[]> results
. Jeśli można to zrobić za pomocą tylko jednej instrukcji, jest jeszcze lepiej.
Wystarczy mieć pewność: Mapa to mapa "id": "total" dla tego id, prawda? –
horus
Masz rację, mapuje się na 'total' – Holger
ostatnia rzecz: używając wyrażenia lambda, jak pisałeś powyżej, zastępując ** Risk :: getTotRisk ** z ** r -> r.totRisk ** nie działa dla mnie (to nie kompiluje). Czy można to osiągnąć za pomocą lamby bez potrzeby tworzenia gettera? – horus