脚本宝典收集整理的这篇文章主要介绍了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); }
博客源码
以上是脚本宝典为你收集整理的java8-06-自定义Collector-JoinCollector全部内容,希望文章能够帮你解决java8-06-自定义Collector-JoinCollector所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。