本文已参与「新人创作礼」活动,一起开启掘金创作之路。
上篇文章讲到如何创建stream流,也就是源,今天我们继续学习通过stream流处理数据的方法。
二、流的基本用法
1、foreach()方法
相信大家已经很熟悉foreach()方法了,在平常的使用中,我们经常通过foreach()遍历每个集合中的元素,进行处理,如:
Arrays.asList("Hello", "World", "I", "am", "stream").stream().forEach(System.out::println);
当然,foreach()方法体也可以写成:
Arrays.asList("Hello", "World", "I", "am", "stream").stream().forEach(s-> {System.out.println(s);});
这样写跟上面的写法是一致的,只不过上面是lamda表达式的写法。
2、filter()方法
filter单词大家也知道,过滤器的意思,那么filter()方法的作用就是,筛选出符合条件的元素并返回stream流,例如:
Arrays.asList("Hello", "World", "I", "am", "stream").stream().filter(s->{s.contains("a")}).forEach(System.out::println);
结果为:
3、sorted()方法
这个方法当然就是对stream流中的元素进行排序啦,通过该方法中参数的定义,可以定义排序规则,并返回排序后的stream流,方法体中传递的参数为Comparator比较器,用来定义排序规则,例如:
Stream.of(4,1,5,6,2,7,8,3,10).sorted().forEach(System.out::println);
可以看到,如果sorted()方法中不传参数,默认按照元素的大小升序排列
那如果是想将数据倒序排列应该怎么做呢?
Stream.of(4,1,5,6,2,7,8,3,10).sorted(Comparator.reverseOrder()).forEach(System.out::println);
其中Comparator.reverseOrder()就是一个比较器,将数据顺序调换
也可以自定义比较器来定义排序规则。
4、distinct()方法
这个方法就是去重的方法,没啥好说的。
Stream.of(3,3,3,3,3,2,7,8,3,10).distinct().sorted(Comparator.reverseOrder()).forEach(System.out::println);
5、map()方法
这个方法是转换stream流中元素,根据map中定义的规则进行转换,并返回转换后的stream流,例如我们第一节开篇中讲到的:
Stream.of("c", "a", "c","b", "c", "c").map(String::toUpperCase).forEach(System.out::println);
是将所有元素变为大写字母。
三、收集流
常用的收集流的方法有:collect()方法
collect()方法
该方法可以将流转为一个集合,比如一个list或set等。
总结
总的来说,stream流的加入对于开发来说对处理集合还是比较方便的,还是要多用才可以熟悉其中的方法的含义。