java 8 Stream

Stream

说明:

  • java 8 中新增
  • java.util.stream.Stream 里的类
  • 不同于 IO 流
  • 针对操作集合(Collection)对象里的数据
  • Stream 是并行化的

Stream对象可以调用多个intermediate(转换) 操作, 但只能有一个 terminal 操作; 多个转换操作会在遇到 terminal 操作之后依次执行,即取集合内的一个元素取出后就依次执行, 相当于只需要for循环一次;

流的操作

把一个数据结构包装成 Stream 后,就要开始对里面的元素进行各类操作了。常见的操作可以归类如下。

Intermediate(转换):

map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered

Terminal(终止):

forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator

Short-circuiting(短路/截断):

anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limit


函数方法

  • map(Function<? super T,? extends R> mapper) 转换对象
    • IntStream mapToInt(ToIntFunction<? super T> mapper)
    • LongStream mapToLong(ToLongFunction<? super T> mapper)
    • DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)
      Read more at https://www.pluralsight.com/guides/java-and-j2ee/java-8-stream-api-part-2?gclid=Cj0KEQiAv4jDBRCC1IvzqqDnkYYBEiQA89utohLUUWPqlyGn2Tg2gcDBDe5XZwXsVqpODHmKpfUtPy4aArHz8P8HAQ#2WWEKDQW8Dhjqzt8.99
  • flatMap(Function<? super T,? extends Stream<? extends R>> mapper) 一个参数里多个元素
  • filter(Predicate<? super T> predicate) 过滤, 返回true的元素才能留下
  • forEach() 遍历, 语句里不能修改值,不能终止
  • peek() 遍历, 与forEach类似
  • reduce() 过滤, 一个起始值(种子),然后依照运算规则(BinaryOperator)
  • limit/skip limit 返回 Stream 的前面 n 个元素;skip 则是扔掉前 n 个元素
  • sorted() 排序
  • min/max 找出最大最小值
  • distinct 过滤重复值
  • Match Stream 有三个 match 方法,从语义上说:
    • allMatch:Stream 中全部元素符合传入的 predicate,返回 true
    • anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true
    • noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true

例子, 来源

1 Comments
Leave a Reply