Ich habe eine Liste von Listen eines bestimmten Objekts und ich möchte alle Elemente der Listen basierend auf einer bestimmten Instanzvariable hinzufügen.Java 8 - Wie summiere ich alles Listenelement in einer Liste von Listen
Mein Objekt:
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];
}
}
ich aus der Datenbank eine Liste von Arrays vom Typ Objekt erhalten:
List<Object[]> results=getResults();
Ich benutze Java 8 bis Gruppe meiner Daten von ID, weil ich will SUM von riskValue
alle Objekte des Typs Risk
mit der gleichen id
. Diese
ist, was ich tue:
List<Risk> risks=results.stream().map(Risk::new).collect(Collectors.toList());
Map<Integer, List<Risk>> byId=risks.stream.collect(Collectors.groupingBy(Risk::getId));
An dieser Stelle ich mein Risiko alle Objekte nach ID gruppiert. Und ich will für jede Liste alle Objekte von riskValue
summieren und die Gesamt haben in der Variablen totRisk
Wie in der Variablen totRisk
die Summe der Variablen riskValue
in jeder Liste berechnen?
Anmerkung1: Ich möchte es mit Java 8 tun, ich weiß, wie es mit Java 7 und darunter zu tun.
Anmerkung2: Vielleicht ist es auch möglich, dies auf einmal zu tun, indem Sie nicht zuerst nach ID gruppieren müssen. Was ich erreichen möchte ist, alle Objekte mit der gleichen ID im Original List<Object[]> results
zu summieren. Wenn es mit nur einer Aussage gemacht werden kann, ist es noch besser.
Nur sicher sein: Karte es ist eine Karte von "id": "total" für diese ID, oder? –
horus
Sie haben Recht, es ist Mapping auf 'total' – Holger
letzte Sache: Lambda Ausdruck wie oben beschrieben zu verwenden, indem Sie ** Risk :: getTotRisk ** mit ** r -> r.totRisk ** funktioniert nicht für mich (es kompiliert nicht). Ist es möglich, es mit einer Lamba zu erreichen, ohne den Getter zu kreieren? – horus