gpt4 book ai didi

java - 在哪里计算 Java 8 lambda 表达式?

转载 作者:太空狗 更新时间:2023-10-29 22:38:05 24 4
gpt4 key购买 nike

lambda 表达式是在我们编写它们的地方还是在任何其他 Java 类中求值?

例如:

Stream<Student> absent =  students.values().stream().filter(s -> !s.present());

传递给过滤器方法的上述 lambda 表达式是否会在编写代码的给定类中立即执行,或者在另一个类中执行,并且与代码编写在Java 8 之前的传统编码风格?

最佳答案

当您编译源代码时,编译器将为您使用的 lambda 表达式插入一个 invokedynamic 字节码指令。实际实现(在您的情况下是 Predicate)将通过 ASM 创建在运行时。当您运行它时,它甚至不会出现在硬盘上 - 这意味着类是在内存中生成的,不会有 Predicate.class 文件。例如,这与匿名类之间存在很大差异 - 当编译 时,匿名类将生成一个 class 文件。

如果您运行示例,您可以看到为 Predicate 生成的文件:

-Djdk.internal.lambda.dumpProxyClasses=/Your/Path/Here

否则Eran's answer是正确的,Stream 由终端操作驱动,如果不存在则不会执行任何操作。你绝对应该阅读优秀的 Holger's answer关于更有趣的差异。

关于java - 在哪里计算 Java 8 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47468384/

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