Interface Collector<T,A,R>
T:输入的类型
A:中间存放数据的容器
R:输出的类型

Collector通过下面四个方法协同工作以完成汇聚操作:
supplier: 创建新的结果容器
accumulator:将输入元素合并到结果容器中
combiner:合并两个结果容器(并行流使用,将多个线程产生的结果容器合并)
finisher:将结果容器转换成最终的表示

    @Override@SuppressWarnings("unchecked")public final <R, A> R collect(Collector<? super P_OUT, A, R> collector) {A container;if (isParallel()&& (collector.characteristics().contains(Collector.Characteristics.CONCURRENT))&& (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) {container = collector.supplier().get();BiConsumer<A, ? super P_OUT> accumulator = collector.accumulator();forEach(u -> accumulator.accept(container, u));}else {container = evaluate(ReduceOps.makeRef(collector));}return collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)? (R) container: collector.finisher().apply(container);}
    public static <T, I> TerminalOp<T, I>makeRef(Collector<? super T, I, ?> collector) {Supplier<I> supplier = Objects.requireNonNull(collector).supplier();BiConsumer<I, ? super T> accumulator = collector.accumulator();BinaryOperator<I> combiner = collector.combiner();class ReducingSink extends Box<I>implements AccumulatingSink<T, I, ReducingSink> {@Overridepublic void begin(long size) {state = supplier.get();}@Overridepublic void accept(T t) {accumulator.accept(state, t);}@Overridepublic void combine(ReducingSink other) {state = combiner.apply(state, other.state);}}return new ReduceOp<T, I, ReducingSink>(StreamShape.REFERENCE) {@Overridepublic ReducingSink makeSink() {return new ReducingSink();}@Overridepublic int getOpFlags() {return collector.characteristics().contains(Collector.Characteristics.UNORDERED)? StreamOpFlag.NOT_ORDERED: 0;}};}

参考:
java8新特性(四) Collector(收集器)
Java8中重要的收集器collector
JAVA8学习9-自定义收集器(Characteristics 使用说明)

java stream Interface Collector<T,A,R>相关推荐

  1. java stream Interface BiFunction<T,U,R>

    T - the type of the first argument to the function U - the type of the second argument to the functi ...

  2. java stream 之Collector

    之前写过一篇嵌套的groupingBy,很简短.这次面试汇丰的时候遇到了一个Collectors.of()的使用方式直接抓瞎了.所以参考各位大佬的博客,阅读源码Collectors源码后决定留个笔记. ...

  3. java核心技术 基础知识<集合并发part1>

    文章目录 java核心技术 基础知识<集合&并发part1> 9 泛型程序设计 9.5 算法 9.6 遗留的集合 14 并发 14.2 中断线程 14.3 线程状态 14.4 线程 ...

  4. java Function Interface BinaryOperator<T>

    继承BiFunction<T,T,T> 主要的区别是泛型,都改为了TTT既相同,这是在有些情况,比如Combiner聚合,要求值类型必须相同 同样需要实现apply方法 R apply(T ...

  5. Java学习第十二天<封装详解><继承><super详解><方法重写><多态>

    封装详解 //类 public class Student {//名字 学号 性别 属性私有(new 以后不能赋值)private String name;private int id;private ...

  6. Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>

    什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...

  7. Interface Collector

    compact1, compact2, compact3 java.util.stream Interface Collector<T,A,R> Type Parameters: 
T - ...

  8. java收集器Collector

    一.收集器Collector //T:表示流中每个元素的类型. A:表示中间结果容器的类型. R:表示最终返回的结果类型. public interface Collector<T, A, R& ...

  9. Java基础系列-Collector和Collectors

    原创文章,转载请标注出处:<Java基础系列-Collector和Collectors> 一.概述 Collector是专门用来作为Stream的collect方法的参数的. public ...

最新文章

  1. 计算器html js php代码,JavaScript计算器网页版实现代码分享
  2. 进击webpack 4 (基础篇一)
  3. 【cocos2d-x】Lua中的table函数库
  4. java 调用SAP RFC函数错误信息集锦
  5. ubuntu16.04版本 the system is running in low-graphics mode
  6. 数据库元数据数据字典查询_3_列出给定表的基本信息
  7. VMware vCloud与Zend Server实现PHP应用程序自动化交付
  8. java 取对象的类_Java中通过Class类获取Class对象的方法详解
  9. 在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题)
  10. 计算机图形学前沿领域的设想,计算机图形学
  11. 9, Java NIO SocketChannel
  12. 计算机网络基础知识应用题,计算机网络试题及答案共十套
  13. 2020年全球区块链专利排行榜TOP100,中国52家公司上榜
  14. cortex a8 java_ARM Cortex-
  15. .py文件应该怎样打开?
  16. 面试应该问公司什么问题
  17. 人民币贬值如何影响你的生活
  18. 一文看懂“知识蒸馏”技术
  19. 今天心情不错,写个随笔。
  20. 光流的计算(Lucas–Kanade method)

热门文章

  1. asp.net GridView 时间格式化 设置 短日期格式 去掉0!
  2. 《C程序设计语言》 第三章 控制流
  3. mysql在同一台机器上实现主从_MySQL 5.7主从搭建(同一台机器)
  4. r语言 图形一览_R语言实战(第2版):第三章 图形初阶(01)
  5. python将一组数据转化为列表_Pandas将列表(List)转换为数据框(Dataframe)
  6. entlib连接oracle乱码,无法构造类型数据库。您必须配置容器以提供此值(EntLib 5 + ODP.NET)...
  7. Python+socket+多线程实现同时应答多客户端的自助聊天机器人
  8. Python+matplotlib数据可视化鼠标悬停自动标注功能实现
  9. Python使用pandas读取Excel文件数据和预处理小案例
  10. python爬虫什么结构好_python爬虫入门:爬虫基础了解一下 !! 盘它