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

标签 java lambda

我是 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/

相关文章:

c++ - 为什么在lambda上使用递归时总是需要[&]?

Java 引用资料。 Java 是否对字符串文字进行特殊检查?

java - 如何使用相对路径在项目文件中使用 FileWriter 创建文件

c# - _=> 这个下划线在 Lambda 表达式中是什么意思?

Python 排序 Lambda

python - 了解 pystache 中的 lambda

javascript - 使用 API Gateway 处理 AWS Lambda 函数中的错误

Javacard 安全设计 : all smartcards the same public and private key a good idea?

java - 如何将 String 从 Servlet 传输到 JSP?

java - parallelStream中HashSet的线程安全