如果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 = 1000000
和someList.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/