java8-06-自定义Collector-JoinCollector

发布时间:2019-11-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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 = ",";      @Override     public Supplier<StringBuilder> supplier() {         return () -> new StringBuilder();     }      @Override     public BiConsumer<StringBuilder, String> accumulator() {         return (sb, str) -> {             if (StringUtils.isNotBlank(str)) {                 sb.append(str).append(seperator);             }         };     }      @Override     public BinaryOperator<StringBuilder> combiner() {         return (l, r) -> l.append(r);     }      @Override     public Function<StringBuilder, String> finisher() {         return c -> {             String ret = c.toString();             if (ret.endsWith(seperator)) {                 return ret.substring(0, ret.length() - 1);             }             return ret;         };     }      @Override     public Set<Characteristics> characteristics() {         return new HashSet<>();     } }

简化代码

static class JoinClollector2 implements Collector<String, StringBuilder, String> {      private String seperator = ",";      @Override     public Supplier<StringBuilder> supplier() {         return StringBuilder::new;     }      @Override     public BiConsumer<StringBuilder, String> accumulator() {         return (sb, str) -> {             if (StringUtils.isNotBlank(str)) {                 sb.append(str).append(seperator);             }         };     }      @Override     public BinaryOperator<StringBuilder> combiner() {         return StringBuilder::append;     }      @Override     public Function<StringBuilder, String> finisher() {         return c -> {             String ret = c.toString();             if (ret.endsWith(seperator)) {                 return ret.substring(0, ret.length() - 1);             }             return ret;         };     }      @Override     public 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-06-自定义Collector-JoinCollector所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。