1、Stream.of()的使用
Stream.of()
方法,其生成的Stream是有限长度的,Stream的长度为其内的元素个数。
of(T... values):返回含有多个T元素的Stream
of(T t):返回含有一个T元素的Stream
例如,
import java.util.*; import java.util.stream.IntStream; public class Demo { public static void main(String[] args) { IntStream intStream = IntStream.of(10, 20, 30, 40, 50); intStream.forEach(System.out::println); } }
2、IntStream.range()的使用
IntStream range(int startInclusive,int endExclusive)
以1为增量步长从startInclusive(包括)到endExclusive(不包括)返回顺序的有序IntStream。
例如,
import java.util.*; import java.util.stream.IntStream; class Demo { public static void main(String[] args) { // 创建 IntStream IntStream stream = IntStream.range(6, 10); stream.forEach(System.out::println); } }
3、Stream.of()和IntStream.range()区别
通过下面代码可以看出Stream.of()
和IntStream.range()
区别.
例如,
import java.util.*; import java.util.stream.IntStream; public class Demo { public static void main(String[] args) { System.out.println("#1"); IntStream.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()
返回一个从startInclusive(包含)
到endExclusive (不包含)的顺序有序的IntStream,递增一步为1,说明它已经排序。既然已经排序了,那么下面的.sorted()
中间操作什么都不做是有道理的。所以peek()
只在第一个元素上执行(因为最后的操作只需要第一个元素)。
Stream.of()
不一定已排序(并且该of()方法不检查它们是否已排序)。因此,.sorted()
必须遍历所有元素才能产生排序Stream,这允许findFirst()
终端操作返回排序Stream的第一个元素。结果,peek对所有元素都执行,即使最后的操作只需要第一个元素。