
image.png
创建流的方法有很多,常见的如:
从Collection集合创建
根据数值范围创建数值流
从一系列值
从数组
从文件
由函数来生成无限流
一、 从Collection集合
Stream stream = new HashSet()
.stream();
Stream stringStream = new ArrayList()
.stream();
二、 根据数值范围创建数值流
IntStream intStream = IntStream.rangeClosed(1, 100);
三、 从一系列值
Stream提供了一个静态方法来根据一系列值生成一个流
Stream integerStream = Stream.of(1, 2, 3);
Stream stringStream = Stream.of("喜欢", "天文", "的", "pony", "站长");
AppleStream apple = new AppleStream();
Stream appleStream = Stream.of(apple, apple, apple);
四、 从数组
//重载了支持特定的基本类型流
IntStream intStream = Arrays.stream(new int[]{1, 2, 3});
LongStream longStream = Arrays.stream(new long[]{1L, 2L, 3L});
DoubleStream doubleStream = Arrays.stream(new double[]{1D, 2D, 3D});
Stream stringStream = Arrays.stream(new String[]{"喜欢", "天文", "的", "pony", "站长"});
AppleStream apple = new AppleStream();
Stream appleStream = Arrays.stream(new AppleStream[]{apple, apple, apple});
五、 从文件
准备文件

image.png
Stream linesStream = Files.lines(Paths.get("fileStream.txt"));
linesStream.forEach(System.out::println);
结果

image.png
六、由函数来生成无限流
Java8提供了Stream.iterate()和Stream.generate()来生成无限流,这两个方法会根据给定的表达式来生成包含无限个数据的流,所以一般结合limit()来使用。
迭代: Stream.iterate(T seed,Function apply)
生成: Stream.generate(Supplier s)
// 给定一个初始值seed,和一个`接收一个入参,并带有返回值的函数`
Stream.iterate(10, x -> x + 5)
.limit(10)
.forEach(System.out::println);
10
15
20
25
30
35
40
45
50
55
Random random = new Random();
// 接收一个 `无入参,有返回值` 的函数
Stream.generate(() -> random.nextInt(100))
.limit(10)
.forEach(System.out::println);
60
56
6
61
7
30
97
64
26
54