JDK 1.8中关于Stream接口的一些易混淆点

 

parallelStream:

Collection
stream方法会返回串行流,而parallelStream会返回并行流,并行流在处理简单数据时效率较高,其底层通过fork/join实现,
会牵扯到多线程的复杂性问题。
并行流使用的线程数目可以通过jvm启动参数进行配置,一个不好的并行流会阻塞其他并行流,使之在运行时成为串行。

flatMap:
Stream
map方法和flatMap方法的入参都是Function接口,flatMap规定了接口的第二个泛型必须继承Stream,
map方法返回一个 Function接口返回的对象 所组成的Stream
flatMap返回一个将 Function接口返回的Stream对象 中所包含的每个对象全部装载进去的合并的Stream

peek:
  Returns a stream consisting of the elements of this stream, additionally performing
  the provided action on each element

  as elements are consumed from the resulting stream.
返回一个包含当前stream中所有元素的stream,并且会在返回的元素被消费时进行函数所给定的操作。

reduce
  一个入参的方法(BinaryOperator<T> accumulator),
  返回值为Optional<T>,等同于
  boolean foundAny = false;
  T result = null;
  for (T element : this stream) {
    if (!foundAny) {
      foundAny = true;
      result = element;
    }
    else
    result = accumulator.apply(result, element);
  }
  return foundAny ? Optional.of(result) : Optional.empty();


  两个入参的方法(T identity,BinaryOperator<T> accumulator),
  返回值为泛型为T的值,该方法等同于
  T result = identity;
  for (T element : this stream)
  result = accumulator.apply(result, element)
   return result;

  三个入参的reduce方法,
  <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator,BinaryOperator<U> combiner);
  允许返回与当前流中数据类型不同的值,计算过程由第二个参数控制,计算方式类似单参的reduce方法,
  三参reduce方法中的第三个参数用于在并行流parallelStream中合并并行计算的结果。

以上内容大多来自对jdk原码注释的理解翻译

 

posted @ 2021-11-21 21:34  陈月亮  阅读(70)  评论(0编辑  收藏  举报