java - 如果列表的总大小小于限制,stream().limit() 会优化执行吗?

标签 java java-8 java-stream limit

如果limit值大于 list 的大小,java会优化而不执行这段代码吗?

List<Long> someList = Arrays.asList(1L, 2L, 3L, 4L, 5L);
int limit = 5;
List<Long> limitedList = someList.stream().limit(limit).collect(Collectors.toList());

比方说,limit = 1000000someList.size() = 99999 .

现在,java 是否有足够的智能来理解列表大小小于限制? 还是会盲目地遍历列表中的每个数字,直到到达列表末尾或达到限制?

最佳答案

不,它不会优化执行(即使在 JDK 11 中)。

让我们尝试最简单的终端操作(count):

var someList = Arrays.asList(1, 2, 3, 4, 5);
var limit = 10_000;
System.out.println(someList
        .stream()
        .peek(System.out::println)
        .limit(limit)
        .count());

程序将打印:

1
2
3
4
5
5

因此,它必须遍历整个流才能找出确切的大小。

关于java - 如果列表的总大小小于限制,stream().limit() 会优化执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192244/

相关文章:

java - 无法使用 java 运行 First Kaa 应用程序

java-8 - 通过流连接字符串

java - 使用 Collectors.groupingby 创建集合的映射

java - 我可以在 Java 8 中复制流吗?

java - 在 Java 中生成字母序列

java - 斯卡拉中的 "built in dependency injection"

java - 为什么 Java 8 泛型类型推断会选择这种重载?

memory-leaks - 如何分析 Java 8 压缩类空间中的内存泄漏?

java - 将循环重构为android中的流

java - 如何提取满足特定条件的列表元素并获取android中这些元素的计数