Collectors.joining()
Java 8
流的新类java.util.stream.Collectors
实现了java.util.stream.Collector
接口,同时又提供了大量的方法对流 (stream
) 的元素执行map
and
reduce
操作,或者统计操作。
Collectors.joining()
方法用某个指定的拼接**字符串**把所有元素拼接成一个字符串,并添加可选的前缀和后缀
joiningExample代码
@Testpublic void joiningExample() {List<String> list = Arrays.asList("1", "2", "3", "4");String defult = list.stream().collect(Collectors.joining());String midAppend = list.stream().collect(Collectors.joining(","));String allAppend = list.stream().collect(Collectors.joining(",", "(", ")"));System.out.println(defult);System.out.println(midAppend);System.out.println(allAppend);}
joiningExample结果
12341,2,3,4(1,2,3,4)
注意
针对字符串进行Join操作,不支持其他形式的Join,没有做全支持仅仅是对字符串进行连接操作 底层也是使用StringBuilder进行append操作最后使用StringBuilder的toString返回拼串底层大量使用量lambda表达式以及语法糖,对于刚学习这些的人看着异常吃力但沉下心提高很大
Joining源码
返回一个Collector,该Collector按遇到顺序将输入元素连接到一个String。
//Returns a Collector that concatenates the input elements into a String, in encounter order.public static Collector<CharSequence, ?, String> joining() {return new CollectorImpl<CharSequence, StringBuilder, String>(StringBuilder::new, StringBuilder::append,(r1, r2) -> {r1.append(r2); return r1; },StringBuilder::toString, CH_NOID);}
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) {return new CollectorImpl<>(() -> new StringJoiner(delimiter, prefix, suffix),StringJoiner::add, StringJoiner::merge,StringJoiner::toString, CH_NOID);}
看着很吃力吧,沉下心,收获也是很大的
一点唠叨:
相对于Collectors.averagingDouble()
来说,方法体只执行一次。相对于Collectors.averagingDouble()
来说,方法体做出了优化相对于Collectors.averagingDouble()
来说,这个没有坑……为什么这么提Collectors.averagingDouble()
,最好看一下—>averagingDouble因为Collectors.averagingDouble()
有坑,有坑,有坑