System.out.println(e)) -6ren">
gpt4 book ai didi

java - Stream.of 和 IntStream.range 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 04:26:50 24 4
gpt4 key购买 nike

请考虑以下代码:

System.out.println("#1");
Stream.of(0, 1, 2, 3)
.peek(e -> System.out.println(e))
.sorted()
.findFirst();

System.out.println("\n#2");
IntStream.range(0, 4)
.peek(e -> System.out.println(e))
.sorted()
.findFirst();
输出将是:
#1
0
1
2
3

#2
0
谁能解释一下,为什么两个流的输出不同?

最佳答案

那么,IntStream.range()返回 a sequential ordered IntStream from startInclusive(inclusive) to endExclusive (exclusive) by an incremental step of 1 ,这意味着它已经排序。既然已经排序好了,下面的 .sorted() 才有意义中间操作什么都不做。结果,peek()只在第一个元素上执行(因为终端操作只需要第一个元素)。
另一方面,传递给 Stream.of() 的元素不一定已排序(并且 of() 方法不检查它们是否已排序)。因此,.sorted()必须遍历所有元素才能生成排序流,这允许 findFirst()返回排序流的第一个元素的终端操作。结果,peek对所有元素执行,即使终端操作只需要第一个元素。

关于java - Stream.of 和 IntStream.range 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67669583/

24 4 0