自定义实现Collector,和对Characteristics的实验

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;import static java.util.stream.Collector.Characteristics.*;/*** input Set output Map<String, String>* eg、* input  : ["hello","world","hello world"]* output : [{hello, hello}, {world, world}, {hello world, hello world}]*/
public class MySetCollector2<T> implements Collector<T, Set<T>, Map<T, T>> {@Overridepublic Supplier<Set<T>> supplier() {System.out.println("supplier is invoked!");return TreeSet<T>::new;}@Overridepublic BiConsumer<Set<T>, T> accumulator() {System.out.println("accumulator is invoked!");return (set, item) -> {// 打出当前执行的线程的名称System.out.println("accumulator " + Thread.currentThread().getName());set.add(item);};}@Overridepublic BinaryOperator<Set<T>> combiner() {System.out.println("combiner is invoked!");return (set1, set2) -> {System.out.println("set1: " + set1);System.out.println("set2: " + set2);set1.addAll(set2);return set1;};}@Overridepublic Function<Set<T>, Map<T, T>> finisher() {System.out.println("finisher is invoked!");return set -> {Map<T,T> map = new TreeMap<>();set.forEach(item-> map.put(item,item));return map;};}@Overridepublic Set<Characteristics> characteristics() {System.out.println("supplier is invoked!");return Collections.unmodifiableSet(EnumSet.of(UNORDERED,CONCURRENT));}public static void main(String[] args) {List<String> list = Arrays.asList("hello","world","hello","1","das","v","ads","ads","adsf","adf");for (int i = 0; i < 1; i++) {Set<String> set = new HashSet<>(list);Map<String, String> map = list.parallelStream().collect(new MySetCollector2<>());System.out.println(map);}}
}
  /*** Characteristics indicating properties of a {@code Collector}, which can* be used to optimize reduction implementations.*/enum Characteristics {/*** Indicates that this collector is <em>concurrent</em>, meaning that* the result container can support the accumulator function being* called concurrently with the same result container from multiple* threads.** <p>If a {@code CONCURRENT} collector is not also {@code UNORDERED},* then it should only be evaluated concurrently if applied to an* unordered data source.*/// 指定这个后中间结果只有一个CONCURRENT,/*** Indicates that the collection operation does not commit to preserving* the encounter order of input elements.  (This might be true if the* result container has no intrinsic order, such as a {@link Set}.)*/// 无序的UNORDERED,/*** Indicates that the finisher function is the identity function and* can be elided.  If set, it must be the case that an unchecked cast* from A to R will succeed.*/// 中间结果和返回结果一致时才可以调用IDENTITY_FINISH}

自定义实现Collector,和对Characteristics的实验相关推荐

  1. 怎么在java中创建一个自定义的collector

    文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream ...

  2. java全局变量怎么定义_怎么在java中创建一个自定义的collector

    简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...

  3. c++中的new_怎么在java中创建一个自定义的collector

    简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...

  4. Java 8 自定义流Collector实现

    Java 8 自定义流Collector实现 前文我们看到 Java 8 Collectors提供了很多内置实现.但有时我们需要实现一些特定功能满足业务需要,本文带你学习如何自定义Collector的 ...

  5. java中collector使用_怎么在java中创建一个自定义的collector

    怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或 ...

  6. 实验4:Zigbee使用非易失性存储器来存储自定义数据 - 新兵训练营(6)

    English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...

  7. Java 8系列之Stream的强大工具Collector

    Stream系列: Java 8系列之Stream的基本语法详解 Java 8系列之Stream的强大工具Collector Java 8系列之重构和定制收集器 Java 8系列之Stream中万能的 ...

  8. 矩阵累积相乘 java_累积:轻松自定义Java收集器

    矩阵累积相乘 java Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java ...

  9. 累积:轻松自定义Java收集器

    Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java Collector更加容 ...

最新文章

  1. 如何确定敏捷是否适合你的团队?
  2. 令人苦恼的调试缓慢问题
  3. php中删除评论怎么做的,php实现评论回复删除功能
  4. 机器学习及大数据经典算法笔记汇总
  5. linux编译gcc5.1.0,linux编译gcc-5.1.0
  6. raspberry pi_如何将Raspberry Pi配置为微控制器
  7. 播放失败,请在设置中切换输出设备(后续)
  8. Nginx 架构原理
  9. flask框架的使用
  10. 工欲善其事必先利其器——AWS认证是你最好的磨刀石
  11. 戴尔服务器安装ESXI
  12. elasticsearch2.4.1+kibana4.6.1+mavel2.4.1
  13. 服务器被DDoS攻击,怎么破?
  14. 三十八、西梁女儿国疑案之一落胎泉的秘密
  15. TCL/TK脚本应用tclkit工具打包
  16. 五、数据CRUD操作
  17. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。VIN车辆识别代号查询系统
  18. angelababy都靠它保持身材,只需10秒随时随地喝到新鲜果汁!
  19. java实现qq聊天室功能
  20. 室友打了一晚上游戏我学会了使用GDB调试

热门文章

  1. 2016.10.14,英语,《American Accent Training》
  2. python用于pmc排产可以吗_PMC生产排程——模拟排程
  3. jaccard相似度
  4. 翌加科技:抖音商品侵权如何处理
  5. Oracle的nvl(a,b)函数说明
  6. MySQL中创 NVL 函数
  7. 使用 ONLYOFFICE 宏将形状替换为图表
  8. pyqt登录界面跳转及传值给主界面
  9. zeppelin集成presto
  10. Inno Setup入门(十四)——替换安装程序和卸载程序的图标