stream.forEach(System.out::println);
}
输出结果
a
b
c
d
[](
)通过数组创建流
@Test
public void testArrayStream() {
int[] arr = new int[]{1, 2, 3, 4};
IntStream intStream = Arrays.stream(arr);
intStream.forEach(System.out::println);
System.out.println("========");
Integer[] arr2 = new Integer[]{1, 2, 3, 4};
Stream stream = Arrays.stream(arr2);
stream.forEach(System.out::println);
}
输出结果
1
2
3
4
========
1
2
3
4
[](
)通过Stream.of方法创建流
@Test
public void testStreamOf() {
Stream stream = Stream.of(1, 2, 3);
stream.forEach(System.out::println);
}
输出结果
1
2
3
[](
)创建规律的无限流
@Test
public void testUnlimitStream() {
Stream stream = Stream.iterate(0, x -> x + 2).limit(3);
stream.forEach(System.out::println);
}
输出结果
0
2
4
[](
)创建无限流
@Test
public void testUnlimitStream2() {
Stream stream = Stream.generate(() -> “number” + new Random().nextInt()).limit(3);
stream.forEach(System.out::println);
}
输出结果
number1042047526
number-155761434
number-1605164634
[](
)创建空流
@Test
public void testEmptyStream() {
Stream stream = Stream.empty();
stream.forEach(System.out::println);
}
[](
)Stream操作分类
-
中间操作又可以分为无状态(Stateless)与有状态(Stateful)操作,
-
无状态是指元素的处理不受之前元素的影响,
-
有状态是指该操作只有拿到所有元素之后才能继续下去。
-
终结操作又可以分为短路(Short-circuiting)与非短路(Unshort-circuiting)操作,
-
短路是指遇到某些符合条件的元素就可以得到最终结果,
-
非短路是指必须处理完所有元素才能得到最终结果。
-
我们通常还会将中间操作称为懒操作,也正是由这种懒操作结合终结操作、数据源构成的处理管道(Pipeline),实现了 Stream 的高效。
[](
)中间操作
[](
)无状态
-
filter:过滤流,过滤流中的元素
-
map:转换流,将一种类型的流转换为另外一种类型的流
-
flapMap:拆解流,将流中每一个元素拆解成一个流
[](
)filter
filter接收一个Predicate函数接口参数,boolean test(T t);即接收一个参数,返回boolean类型。
@Test
public void testFilter() {
Integer[] arr = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Arrays.stream(arr).filter(x -> x > 3 && x < 8).forEach(System.out::println);
}
输出结果
4
5
6
7
[](
)map
map接收一个Function<T, R>函数接口,R apply(T t);即接收一个参数,并且有返回值。
@Test
public void testMap() {
String[] a