Collectors.joining() 比眉伴天荒 2021-09-22 02:38 482阅读 0赞 ## Collectors.joining() ## > `Java 8` 流的新类 `java.util.stream.Collectors` 实现了 `java.util.stream.Collector` 接口,同时又提供了大量的方法对流 ( `stream` ) 的元素执行 `map` `and` `reduce` 操作,或者统计操作。 `Collectors.joining()` 方法用某个指定的拼接\*\***字符串**\*\*把所有元素拼接成一个字符串,并添加可选的前缀和后缀 ### joiningExample代码 ### @Test public 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结果 ### 1234 1,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**][averagingDouble] * 因为`Collectors.averagingDouble()`有坑,有坑,有坑 [averagingDouble]: https://blog.csdn.net/L_fly_J/article/details/120083849
还没有评论,来说两句吧...