我是Lambda的新手,在下面的代码中如何在lambda方法中访问方法变量(personslist
)?
输出代码是整个列表,而不仅仅是一个人:
public class ApplicationL1 {
public static void main(String... args) {
List<Person> personslist = new ArrayList<>();
personslist.add(new Person("A", 10, Gender.Male));
personslist.add(new Person("B", 16, Gender.Female));
personslist.add(new Person("C", 18, Gender.Female));
personslist.add(new Person("D", 31, Gender.Female));
personslist.add(new Person("E", 12, Gender.Female));
personslist.add(new Person("F", 9, Gender.Male));
personslist.add(new Person("G", 40, Gender.Male));
filterPerson(personslist,
personA -> personA.getGender() == Gender.Female && personA.getAge() > 30 && personA.getAge() < 40,
personB -> System.out.println(personslist.toString()));
}
private static void filterPerson(List<Person> personlist, Predicate<Person> tester, Consumer<Person> filtered) {
for (Person person : personlist) {
if (tester.test(person)) {
filtered.accept(person);
}
}
}
}
答案 0 :(得分:2)
您没有理由期望personslist.toString()
仅打印通过过滤器的Person
。
如果您希望代码仅打印与过滤器匹配的人员,则不应打印整个列表。只需打印通过过滤器的每个Person
:
filterPerson(personslist,
personA -> personA.getGender() == Gender.Female && personA.getAge() > 30 && personA.getAge() < 40,
personB -> System.out.println(personB));
personslist
可以被lambda表达式访问,因为它实际上是最终的。