[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相关推荐

  1. 【java8】自定义Collector

    Collector接口包含了一系列方法,为实现具体的归约操作(即收集器)提供了范本.我们已经看过了Collector接口中实现的许多收集器(由Collector接口的工具类Collectors提供), ...

  2. Java8中Collector详解及自定义Collector

    文章目录 1.Collector介绍 2.Collector约束 3.Collector接口方法 4.理解Collector接口声明的方法 5.整合自定义Collector 6.使用collect方法 ...

  3. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  4. java 自定义 operator_java8 自定义Collector

    package com.lgx.jdk8.part02; import java.util.*; import java.util.function.BiConsumer; import java.u ...

  5. Java 8 - 自定义Collector

    文章目录 Pre Collector接口声明的方法 理解 Collector接口中声明的方法 1.建立新的结果容器: supplier 方法 2.将元素添加到结果容器: accumulator 方法 ...

  6. Java8 Stream 自定义收集器Collector

    在之前的例子中,我们都是使用Collectors的静态方法提供的CollectorImpl,为接口Collector<T, A, R>的一个实现类,为了自定义我们自己的Collector, ...

  7. [ lucene扩展 ] 自定义Collector实现统计功能

    对于lucene的统计,我基本放弃使用factedSearch了,效率不高,而且两套索引总觉得有点臃肿! 这次我们通过改造Collector,实现简单的统计功能.经过测试,对几十万的统计还是比较快的. ...

  8. 【java8】自定义Spliterator

    Spliterator是Java 8中加入的另一个新接口:这个名字代表"可分迭代器"(splitableiterator).和Iterator一样,Spliterator也用于遍历 ...

  9. java8 strem的collector.toMap根据指定字段分组

    本文阐述用strem的collector.toMap根据指定字段分组 老规矩,上代码,从代码看问题 先new一个辅助文本的"助教"实体类 import io.swagger.ann ...

  10. Java8中重要的收集器Collector

    Collector介绍 Java8的stream api能很方便我们对数据进行统计分类等工作,函数式编程的风格让我们方便并且直观地编写统计代码. 例如: Stream<Integer> s ...

最新文章

  1. Hinton:胶囊网络的专利是我的了!
  2. 黑龙江省:2025年将建成5G基站11.4万个,15万数据中心机架
  3. vue 同时执行两个函数 点击_【第2112期】 import { reactive } from #39;vue#39;
  4. html 动态调用php文件,html静态页面调用php文件的方法
  5. 居中弹出一个层,打开一个文件。
  6. 使用Java的Apache Camel入门
  7. C语言,利用条件语句判断是否为三角形并输出面积
  8. 了解 object.defineProperty 的基本使用方法(数据双向绑定的底层原理)
  9. oracle24550,ORA-24550: signal received:这个问题的原因及解决办法
  10. java 缓存方法_Java实现一个简单的缓存方法
  11. java帳戶登錄_java.sql.SQLException: ORA-28000: 帐户已被锁定
  12. 文本导入ORACLE快速,Oracle批量导入文本文件快速的方法(sqlldr实现)
  13. 接口报params province error_Python接口测试实践之用例封装及测试报告生成
  14. 如何正确地使用arXiv平台
  15. 排序算法(天勤数据结构高分笔记)
  16. java动态字段排序_Java利用Stream来实现多字段排序功能
  17. 于的繁体字有几种写法_于的繁体字是什么(行书怎么写)
  18. uniapp手机定位或者uniapp结合原生安卓定位
  19. PDFjs的使用说明书
  20. TSL2591STM32固件库开发

热门文章

  1. 《易学C++(第2版)》——1.4 C++能够做些什么
  2. linux 编译C语言代码后产生OBJ文件的方法
  3. CCNA战报每日更新
  4. 河南省2013年对口高考 计算机类专业课试题卷答案,河南省对口高考计算机专业课模拟试卷3...
  5. doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论
  6. 数据备份 另一服务器_为什么NAS网络存储服务器会受到如此多的关注?
  7. 启示录 产品经理 pdf_3个月,从公司前台转行互联网产品经理
  8. 2020-11-05 关于前端‘古董‘dojo的树结构如何默认展开根节点
  9. iOS Simulator功能介绍关于Xamarin IOS开发
  10. 819 c语言程序设计,2018年大连海洋大学计算机科学与技术819高级语言程序设计(C语言)之C程序设计考研核心题库...