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

第六章 用流收集数据

作者: 路过惊遇狗 | 来源:发表于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接口中定义的方法来开发自定义的收集器

相关文章

  • 用流收集数据

    找出流中最大和最小元素 汇总 字符串连接joining工厂方法返回的收集器会把对流中每一个对象应用tostring...

  • 用流收集数据

    归约和总结 分组 分区 收集器接口 可以不用实现Collector进行自定义收集

  • 用流收集数据

    Collection、Collector和Collect的区别: Collection:Collection是集合...

  • 第六章 用流收集数据

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

  • 心得和感悟

    有数据才好分析和管理,学会收集数据,可以从自己日常的时间流,现金流,注意力分配等来锻炼收集数据的能力。

  • java8用流收集数据

    收集器简介 Collector 函数式编程相对于指令式编程的一个主要优势:你只需要指出希望的结果“做什么”,而不用...

  • java8用流收集数据

    用流收集数据 汇总 查找最大值和最小值 连接字符串 广义的归约汇总 reducing需要说那个参数: 1.起始值 ...

  • Stream API(二)用流收集数据

    Java8中提供了Collectors类来做收集器。以下介绍都是使用流中的collect方法接收Collector...

  • 运用数据报表,让你的应用数据一目了然

    在轻流,管理员可以轻松地通过表单收集收据,通过流程流转数据。可是,轻流的强大之处岂止于数据的收集和流转,轻流还致力...

  • Java8-流-用流收集数据和并行流

    收集器简介 汇总 并行流 欢迎访问本人博客查看原文:http://wangnan.tech 收集器简介 对流调用c...

网友评论

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

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