私は2つの異なるメソッドを持つコードを持っていますが、そのうちの1つは動作していて、他のものはコンパイルされていません。Collectors.averagingIntを使用してリストから平均データを取得する
public class CollectorOperations {
public int averageAgeInt(List<Person> persons) {
return persons.stream()
.collect(Collectors.averagingInt(person -> person.getAge()));
}
public double averageAgeDouble(List<Person> personList, int i) {
return personList.stream()
.collect(Collectors.averagingInt(person -> person.getAge()));
}
}
class Person {
private String name;
private String lastName;
private int age;
public Person(String name, String lastName) {
this.name = name;
this.lastName = lastName;
}
public Person(String name, String lastName, int age) {
this.name = name;
this.lastName = lastName;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
戻り値の型が、私はラムダ式からperson.age()
を取得することはできませんが、私はdouble
に戻り値の型を変更したときに、それが働いてint
あるとき、この2つの方法の間の唯一の違いは、戻り値の型である:ここで コードです。
P.S.申し訳ありません、私の英語です。
'Collectors.averagingInt'は平均的には完全に意味のある「Double」を提供しますが、なぜあなたはintを期待しますか? – Joel