gpt4 book ai didi

java - 如何在 lambda 函数中访问方法局部变量?

转载 作者:行者123 更新时间:2023-11-30 02:32:03 30 4
gpt4 key购买 nike

我是 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);
}
}
}
}

最佳答案

您没有理由期望 personslist.toString() 只打印通过过滤器的 Person

如果您希望代码仅打印与过滤器匹配的人员,则不应打印整个列表。只需打印每个通过过滤器的 Person 即可:

filterPerson(personslist, 
personA -> personA.getGender() == Gender.Female && personA.getAge() > 30 && personA.getAge() < 40,
personB -> System.out.println(personB));

personslist 可被 lambda 表达式访问,因为它实际上是最终的。

关于java - 如何在 lambda 函数中访问方法局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44047974/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com