我正在尝试理解 Java 8 中的 Lambda。
假设我有一个 Person 类,如下所示:
public class Person implements {
String name;
GenderEnum gender;
int age;
List<Person> children;
}
现在我想做的是找到所有女性,有小于 10 岁的孩子的人。
Pre java 8 我会这样做:
List<Person> allPersons = somePeople();
List<Person> allFemaleWithChildren = new ArrayList<>();
for(Person p : allPersons) {
for(Person child : p.getChildren()) {
if(child.getAge() < 10 && p.getGender() == GenderEnum.Female) {
allFemaleWithChildren.add(p);
}
}
}
现在 allFemaleWithChildren 应该有我想要的。我一直在尝试使用流做同样的事情我认为我需要使用某种映射、过滤和减少
allPersons.stream()
//filter females
.filter(p -> p.getGender == GenderEnum.Female)
//get the children
.map(c -> c.getChildren())
//filter the ones that are less than 10 years
.filter(c -> c.getAge() < 10)
//return a list with the result
.collect(Collectors.toList())
但是这段代码无法编译。我错过了什么。
另外,我不明白 reduce 方法可以用来做什么。
编译器说
cannot resolve method getAge()
。这是因为c
显然是一个集合而不是集合中的项目,这正是我想要的。