1
性別と年齢フィールドを持つPersonクラスがあります。私は下のコードで各性別の年齢の合計を取得したいと思います。java8ストリームを使用して値の合計をグループ化した文と組み合わせる方法
public void test() {
List<Person> roster = new ArrayList();
Map<Integer, Integer> totalAgeByGender =
roster
.stream()
.collect(
Collectors.groupingBy(
Person::getGender,
Collectors.reducing(
0,
Person::getAge,
Double::sum)));
}
static class Person {
private int gender;
private double age;
public int getGender() {
return gender;
}
public double getAge() {
return age;
}
}
}
以下のように私は上記のコードでコンパイルエラーが生じています:それは、蒸気の文Double::sum
の最後の部分を文句
Bad return type in method reference: cannot convert double to U.
。年齢のタイプを整数に変更し、上記のコードでInteger::sum
を使用すると、正常に動作します。この場合、Double :: sumで何が問題なのかわかりません。
また、セックス欄でグループ化してMap<Integer, List<Person>>
を蒸気表記から返すことはできますか?
'Collectors.summingDouble(Person :: getAge)'はより簡潔です。 –
はい、申し訳ありません。更新しました。 – pscuderi