Java 8ラムダ式で遊んでいました。一例として、私は、リストに含まれている年齢者を総括してみました:Java 8 Lambdas:ストリームを整数型にマッピングしてからsum()を呼び出すとコンパイルされません
import java.util.Arrays;
import java.util.List;
public class Person {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(new Person("FooBar", 12), new Person("BarFoo", 16));
Integer sumOfAges = persons.stream().map(Person::getAge).sum();
System.out.println("summedUpAges: " + sumOfAges);
}
private final String name;
private final Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
私は次のJavaコンパイラでこのスニペットをコンパイルしよう:
openjdk version "1.8.0-ea"
OpenJDK Runtime Environment (build 1.8.0-ea-lambda-night
OpenJDK 64-Bit Server VM (build 25.0-b21, mixed mode)
私は以下のコンパイルエラーを取得:
java: cannot find symbol
symbol: method sum()
location: interface java.util.stream.Stream<java.lang.Integer>
しかし、私がgetAge()メソッドの戻り値をIntegerからintに変更すると、予期した結果が得られます。しかし、時には、その場で署名を変更することは不可能であり、望ましくないこともあります。 getAge()がInteger型を返すときにこれを動作させる方法はありますか?事前に
おかげで、 ダニエル
'reduce()'も正しく動作するはずです - 'map(Person :: getAge).reduce(0、Integer :: sum)' – ZhongYu