您的位置 首页 java

「java分享」JDK8中的Stream流-高级用法

【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:大家如果对内容有什么疑问,或者我写的哪里不好理解的,可以评论区提出来,我会一一回复,希望能和大家一起进步学习

文章来源:智云一二三科技

文章标题:「java分享」JDK8中的Stream流-高级用法

文章地址:https://www.zhihuclub.com/177032.shtml

关于作者: 智云科技

热门文章

网站地图