以下の集計を実行するためのJavaの集約関数はありますか?集計Java内のオブジェクトのリスト
Person {
String name;
String subject;
String department;
Long mark1;
Long mark2;
Long mark3;
}
リストには以下のデータが含まれています。
Name |Subject |Department |Mark1 |Mark2 |Mark3 --------|-----------|-----------|-------|-------|----- Clark |English |DEP1 |7 |8 |6 Michel |English |DEP1 |6 |4 |7 Dave |Maths |DEP2 |3 |5 |6 Mario |Maths |DEP1 |9 |7 |8
集計基準は、サブジェクト& Depです。得られた目的は、この凝集は、手動でリストを反復することによって達成され、集約されたリストを作成することができる
Subject |Department |Mark1 |Mark2 |Mark3 ----------- |-----------|-------|-------|----- English |DEP1 |13 |12 |13 Maths |DEP2 |3 |5 |6 Maths |DEP1 |9 |7 |8
する必要があります。例を次に示します。
private static List<Person> getGrouped(List<Person> origList) {
Map<String, Person> grpMap = new HashMap<String, Person>();
for (Person person : origList) {
String key = person.getDepartment() + person.getSubject();
if (grpMap.containsKey(key)) {
Person grpdPerson = grpMap.get(key);
grpdPerson.setMark1(grpdPerson.getMark1() + person.getMark1());
grpdPerson.setMark2(grpdPerson.getMark2() + person.getMark2());
grpdPerson.setMark3(grpdPerson.getMark3() + person.getMark3());
} else {
grpMap.put(key, person);
}
}
return new ArrayList<Person>(grpMap.values());
}
しかし、私たちが活用できるJava 8の集約関数や機能はありますか?
ここでグループ化コレクターのストリームが役立つかもしれません。 – Kayaman
http://stackoverflow.com/questions/21020562/aggregate-functions-over-a-list-in-javaこれは、Stream.collectを使用して同様のグループ化を行う例を示しています。 – Jaiprakash
手動反復がどのように見える? – shmosel