java8-06-自定义Collector-JoinCollector
[TOC]
声明
这一系列文章旨在帮助大家理解 Collector 的执行流程,至于实现的是否高效、是否优雅、是否合理等暂且不论。
上一篇文章分享了 Collector
的执行流程。现在就来自定义一个最简单的 JoinCollector
看看。
若对 Collector
的各个流程有疑问请移驾此处:http://blog.csdn.net/hylexus/...
简单实现
static class JoinClollector implements Collector<String, StringBuilder, String> {private String seperator = ",";@Overridepublic Supplier<StringBuilder> supplier() {return () -> new StringBuilder();}@Overridepublic BiConsumer<StringBuilder, String> accumulator() {return (sb, str) -> {if (StringUtils.isNotBlank(str)) {sb.append(str).append(seperator);}};}@Overridepublic BinaryOperator<StringBuilder> combiner() {return (l, r) -> l.append(r);}@Overridepublic Function<StringBuilder, String> finisher() {return c -> {String ret = c.toString();if (ret.endsWith(seperator)) {return ret.substring(0, ret.length() - 1);}return ret;};}@Overridepublic Set<Characteristics> characteristics() {return new HashSet<>();}
}
简化代码
static class JoinClollector2 implements Collector<String, StringBuilder, String> {private String seperator = ",";@Overridepublic Supplier<StringBuilder> supplier() {return StringBuilder::new;}@Overridepublic BiConsumer<StringBuilder, String> accumulator() {return (sb, str) -> {if (StringUtils.isNotBlank(str)) {sb.append(str).append(seperator);}};}@Overridepublic BinaryOperator<StringBuilder> combiner() {return StringBuilder::append;}@Overridepublic Function<StringBuilder, String> finisher() {return c -> {String ret = c.toString();if (ret.endsWith(seperator)) {return ret.substring(0, ret.length() - 1);}return ret;};}@Overridepublic Set<Characteristics> characteristics() {return Collections.emptySet();}
}
使用自定义Collector
@Test
public void test() {String str = Lists.newArrayList("a", "B", "c", "d").stream().collect(new JoinClollector());System.out.println(str);
}
博客源码
https://github.com/hylexus/bl...
java8-06-自定义Collector-JoinCollector相关推荐
- 【java8】自定义Collector
Collector接口包含了一系列方法,为实现具体的归约操作(即收集器)提供了范本.我们已经看过了Collector接口中实现的许多收集器(由Collector接口的工具类Collectors提供), ...
- Java8中Collector详解及自定义Collector
文章目录 1.Collector介绍 2.Collector约束 3.Collector接口方法 4.理解Collector接口声明的方法 5.整合自定义Collector 6.使用collect方法 ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- java 自定义 operator_java8 自定义Collector
package com.lgx.jdk8.part02; import java.util.*; import java.util.function.BiConsumer; import java.u ...
- Java 8 - 自定义Collector
文章目录 Pre Collector接口声明的方法 理解 Collector接口中声明的方法 1.建立新的结果容器: supplier 方法 2.将元素添加到结果容器: accumulator 方法 ...
- Java8 Stream 自定义收集器Collector
在之前的例子中,我们都是使用Collectors的静态方法提供的CollectorImpl,为接口Collector<T, A, R>的一个实现类,为了自定义我们自己的Collector, ...
- [ lucene扩展 ] 自定义Collector实现统计功能
对于lucene的统计,我基本放弃使用factedSearch了,效率不高,而且两套索引总觉得有点臃肿! 这次我们通过改造Collector,实现简单的统计功能.经过测试,对几十万的统计还是比较快的. ...
- 【java8】自定义Spliterator
Spliterator是Java 8中加入的另一个新接口:这个名字代表"可分迭代器"(splitableiterator).和Iterator一样,Spliterator也用于遍历 ...
- java8 strem的collector.toMap根据指定字段分组
本文阐述用strem的collector.toMap根据指定字段分组 老规矩,上代码,从代码看问题 先new一个辅助文本的"助教"实体类 import io.swagger.ann ...
- Java8中重要的收集器Collector
Collector介绍 Java8的stream api能很方便我们对数据进行统计分类等工作,函数式编程的风格让我们方便并且直观地编写统计代码. 例如: Stream<Integer> s ...
最新文章
- Hinton:胶囊网络的专利是我的了!
- 黑龙江省:2025年将建成5G基站11.4万个,15万数据中心机架
- vue 同时执行两个函数 点击_【第2112期】 import { reactive } from #39;vue#39;
- html 动态调用php文件,html静态页面调用php文件的方法
- 居中弹出一个层,打开一个文件。
- 使用Java的Apache Camel入门
- C语言,利用条件语句判断是否为三角形并输出面积
- 了解 object.defineProperty 的基本使用方法(数据双向绑定的底层原理)
- oracle24550,ORA-24550: signal received:这个问题的原因及解决办法
- java 缓存方法_Java实现一个简单的缓存方法
- java帳戶登錄_java.sql.SQLException: ORA-28000: 帐户已被锁定
- 文本导入ORACLE快速,Oracle批量导入文本文件快速的方法(sqlldr实现)
- 接口报params province error_Python接口测试实践之用例封装及测试报告生成
- 如何正确地使用arXiv平台
- 排序算法(天勤数据结构高分笔记)
- java动态字段排序_Java利用Stream来实现多字段排序功能
- 于的繁体字有几种写法_于的繁体字是什么(行书怎么写)
- uniapp手机定位或者uniapp结合原生安卓定位
- PDFjs的使用说明书
- TSL2591STM32固件库开发
热门文章
- 《易学C++(第2版)》——1.4 C++能够做些什么
- linux 编译C语言代码后产生OBJ文件的方法
- CCNA战报每日更新
- 河南省2013年对口高考 计算机类专业课试题卷答案,河南省对口高考计算机专业课模拟试卷3...
- doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论
- 数据备份 另一服务器_为什么NAS网络存储服务器会受到如此多的关注?
- 启示录 产品经理 pdf_3个月,从公司前台转行互联网产品经理
- 2020-11-05 关于前端‘古董‘dojo的树结构如何默认展开根节点
- iOS Simulator功能介绍关于Xamarin IOS开发
- 819 c语言程序设计,2018年大连海洋大学计算机科学与技术819高级语言程序设计(C语言)之C程序设计考研核心题库...