下面挑几个比较常用的stream流函数进行一一介绍
forEach函数
void forEach(Consumer<? super T> var1);
forEach方法的含义就是遍历整个集合,可以在foreach遍历的过程中执行对应操作
可以看到forEach需要一个consumer类型的函数接口,consumer函数接口是一个没有返回类型的接口方法,因此foreach是方法也是void返回类型。
一般使用场景
Stream<String> stringStream = Stream.of("1", "2", "3");
stringStream.forEach(System.out::print);
同时需要注意forEach是一个终止函数
map函数
<R> Stream<R> map(Function<? super T, ? extends R> var1);
map函数的返回类型是一个新的stream流,简单来说就是将stream流进行转化为不同类型的stream流
map函数的源码是一个function类型的函数式接口,不仅需要参数而且还会有返回值。
同时需要注意的是map函数是一个中间函数而不是终止函数,必须要搭配一个中间函数来使用才能去使用。
一般使用场景
Stream<String> stringStream = Stream.of("1", "2", "3");
stringStream.map(Integer::parseInt).forEach(System.out::print);
上述示例就是将原来的string类型的集合转化为map类型的同时调用foreach终止方法保证能够执行
Sort函数
Stream<T> sorted();
Stream<T> sorted(Comparator<? super T> var1);
对于stream流中含有两个sort函数一个不带参数一个带参数
其中不带参数则是基于本身类的compare方法进行排序的,如果类本身没有排序则可以通过带参数的compare来进行自定义排序
一般使用场景:
stringStream.map(Integer::parseInt).sorted((a,b)->a-b).forEach(System.out::print);
上述代码就是使用sorted并且搭配了map以及foreach方法进行简单的排序
同时sorted是一个间接方法而不是终止方法无法单独使用
reduce函数
如果需要将所有数据归纳得到为一个数据则可以使用reduce函数
T reduce(T var1, BinaryOperator<T> var2);
对于reduce函数第一个参数代表默认值,第二个则是一个函数接口表示用来进行合并数据的逻辑
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
// 输出结果:15(0+1+2+3+4+5)
可以看出第一个参数0,表示默认值当第一次函数调用的时候则是a,集合第一个参数则是b以此类推,最终实现累加