自定义实现Collector,和对Characteristics的实验
自定义实现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的实验相关推荐
- 怎么在java中创建一个自定义的collector
文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream ...
- java全局变量怎么定义_怎么在java中创建一个自定义的collector
简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...
- c++中的new_怎么在java中创建一个自定义的collector
简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...
- Java 8 自定义流Collector实现
Java 8 自定义流Collector实现 前文我们看到 Java 8 Collectors提供了很多内置实现.但有时我们需要实现一些特定功能满足业务需要,本文带你学习如何自定义Collector的 ...
- java中collector使用_怎么在java中创建一个自定义的collector
怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或 ...
- 实验4:Zigbee使用非易失性存储器来存储自定义数据 - 新兵训练营(6)
English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...
- Java 8系列之Stream的强大工具Collector
Stream系列: Java 8系列之Stream的基本语法详解 Java 8系列之Stream的强大工具Collector Java 8系列之重构和定制收集器 Java 8系列之Stream中万能的 ...
- 矩阵累积相乘 java_累积:轻松自定义Java收集器
矩阵累积相乘 java Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java ...
- 累积:轻松自定义Java收集器
Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java Collector更加容 ...
最新文章
- 如何确定敏捷是否适合你的团队?
- 令人苦恼的调试缓慢问题
- php中删除评论怎么做的,php实现评论回复删除功能
- 机器学习及大数据经典算法笔记汇总
- linux编译gcc5.1.0,linux编译gcc-5.1.0
- raspberry pi_如何将Raspberry Pi配置为微控制器
- 播放失败,请在设置中切换输出设备(后续)
- Nginx 架构原理
- flask框架的使用
- 工欲善其事必先利其器——AWS认证是你最好的磨刀石
- 戴尔服务器安装ESXI
- elasticsearch2.4.1+kibana4.6.1+mavel2.4.1
- 服务器被DDoS攻击,怎么破?
- 三十八、西梁女儿国疑案之一落胎泉的秘密
- TCL/TK脚本应用tclkit工具打包
- 五、数据CRUD操作
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。VIN车辆识别代号查询系统
- angelababy都靠它保持身材,只需10秒随时随地喝到新鲜果汁!
- java实现qq聊天室功能
- 室友打了一晚上游戏我学会了使用GDB调试