【java分享】JDK8中的Stream流-高级用法
前言
接上篇Stream流的介绍,因为平时工作中需要用到的场景还是挺多的,这里继续再介绍一下更多用法。
加工方法
- sorted()
对列表排序,需要Stream流中的对象实现java.lang.Comparable接口
- sorted(Comparator<? super T> comparator)
传入排序方法,自定义如何排序,如:
Stream.of(new AccessLog()).sorted((a, b) -> {
/*
返回值:
0:表示ab相等
1:表示a在b前面
-1:表示b在a前面
*/
return a.getTime().compareTo(b.getTime());
});
- distinct()
去除重复元素(最底层通过hashcode 和 equals来判断是否重复)
- flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
对流扁平化处理,合并拼接Stream流,例子:
Stream.of("a_b", "c_d_e_f")
.flatMap(s -> Arrays.stream(s.split("_")))
.forEach(System.out::println);
//输出 a,b,c,d,e,f 而不是 [a,b],[c,d,e,f],两个数组转化为流返回,会被拼接成一个流
- peek(Consumer<? super T> action)
通常用于Stream流的Debug,在中间输出内容,因为foreach输出的话,流会终结
终结方法
- findFirst()
返回流中第一个对象,可通过skip指定获取第几个
- allMatch(Predicate<? super T> predicate)
返回Boolean值,当流中所有对象都满足某个条件时返回True,否则为False
- anyMatch(Predicate<? super T> predicate)
返回Boolean值,当流中有一个对象满足某个条件时返回True,否则为False
- noneMatch(Predicate<? super T> predicate)
返回Boolean值,当流中没有对象满足某个条件时返回True,否则为False三个Match的例子:
Stream.of("a_b", "c_d_e_f").allMatch(s -> s.contains("c"));//false
Stream.of("a_b", "c_d_e_f").noneMatch(s -> s.contains("c"));//false
Stream.of("a_b", "c_d_e_f").anyMatch(s -> s.contains("c"));//true
- max(Comparator<? super T> comparator)
比较后返回流中最大的值
- min(Comparator<? super T> comparator)
和max方法相反,返回最小的值
最后
学习新知识,一定要自己写一下,才能真正理解并记住这个知识点,不然,就容易看完我会了,需要用又忘了。
PS:大家如果对内容有什么疑问,或者我写的哪里不好理解的,可以评论区提出来,我会一一回复,希望能和大家一起进步学习
本文暂时没有评论,来添加一个吧(●'◡'●)