Java8新特性-Stream

原文地址:
https://juejin.cn/post/6844903646648336397#heading-0

Steam流是什么?

肤浅的理解:是对元素队列的一种逐个操作

如何使用流

  1. 创建 Stream:从一个数据源(如集合、数组)中获取一个流
  2. 中间操作:一个或多个中间操作,对数据源的数据进行处理
  3. 终止操作:执行中间操作链,并产生结果

创建流

  • 由集合创建流
    • Stream stream() : 返回一个顺序流
    • Stream parallelStream() : 返回一个并行流
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
  • 由数组创建流
    Java8 中的 Arrays 的静态方法 stream() 可以从数组获取流:
static Stream stream(T[] array): 返回一个流

还有重载形式,能够处理对应基本类型的数组:

public static IntStream stream(int[] array)
public static LongStream stream(long[] array)
public static DoubleStream stream(double[] array)
  • 由值创建流
    可以使用静态方法 Stream.of(), 通过显示值创建一个流。它可以接收任意数量的参数。
public static Stream of(T… values) 
  • 由函数创建无限流
    可以使用静态方法 Stream.iterate() 和Stream.generate(), 创建无限流。
public static Stream iterate(final T seed, final UnaryOperator f)
public static Stream generate(Supplier s) 

中间操作

  • 筛选

    • filter()
    • distinct() 去重
  • 切割

    • limit() 截取
    • skip() 跳过
  • 映射

    • map()
    • mapToDouble() 跟map很像,只不过映射的结果一定是要Double类型
  • 排序

    • sorted()

终止操作

  • 查找与匹配
allMatch(Predicate p) 检查是否匹配所有元素
anyMatch(Predicate p) 检查是否至少匹配一个元素
noneMatch(Predicate p) 检查是否没有匹配所有元素
findFirst() 返回第一个元素
findAny() 返回当前流中的任意元素
count() 返回流中元素总数
max(Comparator c) 返回流中最大值
min(Comparator c) 返回流中最小值
forEach(Consumer c) 内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代。相反, Stream API 使用内部迭代)
  • 归约
reduce(T iden, BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。返回 T
reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。返回 Optional
  • 收集
    collect(Collector c) 将流转换为其他形式。接收一个Collector接口的实现,用于给流中元素做汇总的方法。
posted @ 2021-06-10 16:39  爱饮凉水  阅读(60)  评论(0编辑  收藏  举报