Tôi đã chơi xung quanh với các biểu thức lambda Java8. Như một ví dụ tôi sau đó đã cố gắng để tổng hợp các lứa tuổi người chứa trong một danh sách:Java 8 Lambdas: Ánh xạ một Stream để nhập Integer và sau đó gọi sum() sẽ không biên dịch
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;
}
}
Khi tôi cố gắng biên dịch đoạn mã này với trình biên dịch java sau:
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)
tôi nhận được lỗi biên dịch sau :
java: cannot find symbol
symbol: method sum()
location: interface java.util.stream.Stream<java.lang.Integer>
Nhưng nếu tôi thay đổi giá trị trả về của phương thức getAge() từ Integer thành int, tôi nhận được kết quả mong đợi. Nhưng đôi khi không thể hoặc muốn thay đổi chữ ký khi đang bay. Có cách nào để làm việc này khi getAge() trả về một kiểu Integer không?
Cảm ơn trước, Daniel
'reduce()' cũng hoạt động - 'map (Person :: getAge) .reduce (0, Integer :: sum)' – ZhongYu