美文网首页
第六章 用流收集数据

第六章 用流收集数据

作者: 路过惊遇狗 | 来源:发表于2018-12-23 18:54 被阅读0次

    1、collect是一个终端操作,它接受的参数是将流中元素累计到汇总结果的各种方式(称为收集器,对应参数的函数式接口是Collector<T, A, R>)

    2、Collector<T, A, R>:其中T、A、R分别是流中元素的类型、用于累积部分结果的对象类型,collect操作最终结果的类型。

    3、预定义收集器java.util.steam.Collectors:包含将流元素归约和汇总到一个值,例如计算最小值、最大值或平均值。总结如下:

        a)、Collector<T, ?, List<T>> toList();

            把流中所有项目收集到一个List中。

        b)、Collector<T, ?, Set<T>> toSet();

            把流中所有项目收集到一个Set中(不会出项重复项)。

        c)、Collector<T, ?, C> toCollection(Supplier<C> collectionFactory);

            把流中所有项目收集到给定的供应源创建的集合中。

        d)、Collector<T, ?, Long> counting();

            计算流中元素的个数。

        e)、Collector<T, ?, Integer> summingInt(ToIntFunction<? super T> mapper);

            对流中项目的一个整数属性求和。

        f)、Collector<T, ?, Double> averagingInt(ToIntFunction<? super T> mapper);

            对流中项目的Integer属性计算平均值。

        g)、Collector<T, ?, IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper);

            收集关于流中项目Integer属性的统计值,例如最大、最小、总和与平均值。

        h)、Collector<CharSequence, ?, String> joining(CharSequence delimiter);

            连接对流中每个项目调用toString()方法所生成的字符串。

        i)、Collector<T, ?, Optional<T>> maxBy(Comparator<? super T> comparator);

            一个包裹了流中按照给定比较器选出的最大元素的Optional,或如果流为空则Optional.empty() == true。

        j)、Collector<T, ?, Optional<T>> minBy(Comparator<? super T> comparator);

            一个包裹了流中按照给定比较器选出的最小元素的Optional,或如果流为空则Optional.empty() == true。

        k)、Collector<T, ?, U> reducing(U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op);

            从一个作为累加器的初始值开始,利用BinaryOperator与流中的元素逐个结合,从而将流规约为单个值。

            使用示例:int totalCalories = menuStream.collect(Collectors.reducing(0, Dish::getCalories, Integer::sum));

        l)、Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher);

            包裹另一个收集器,对其结果应用转换函数。

            使用示例:int howManyDishes = menuStream.collect(Collectors.collectingAndThen(Collectors.toList(), List::size));

        m)、Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier);

            根据项目的一个属性的值对流中的项目作问组,并将属性值作为结果Map的键。

        n)、Collector<T, ?, Map<Boolean, List<T>>> partitioningBy(Predicate<? super T> predicate);

            根据对流中每个项目应用谓词的结果来对项目进行分区。

    4、收集器可高效地复合起来,进行多级分组、分区和规约。

    5、可以实现Collector接口中定义的方法来开发自定义的收集器

    相关文章

      网友评论

          本文标题:第六章 用流收集数据

          本文链接:https://www.haomeiwen.com/subject/aennkqtx.html