Collectors.joining()是Java 8 Stream API中基于StringJoiner的字符串拼接收集器,支持无参(直接拼接)、单参(分隔符)、三参(分隔符+前缀+后缀)用法,需注意null处理和对象toString()合理性。

Collectors.joining() 是 Java 8 Stream API 中专门用于将流中元素拼接成字符串的收集器,底层调用 StringJoiner,简洁高效,适合替代手动循环 + StringBuilder 的写法。
基础用法:默认无分隔符
不传参数时,直接拼接所有元素(无任何分隔),适用于元素本身已含格式或全是单字符等场景:
List<string> list = Arrays.asList("a", "b", "c");
String result = list.stream().collect(Collectors.joining()); // 结果:"abc"</string>
指定分隔符(最常用)
传入一个字符串作为分隔符,会在每两个元素之间插入它:
List<string> words = Arrays.asList("Hello", "World", "Java");
String joined = words.stream().collect(Collectors.joining(" ")); // "Hello World Java"
String csv = words.stream().collect(Collectors.joining(",")); // "Hello,World,Java"</string>
带前缀和后缀(如括号、引号包裹)
三个参数依次为:分隔符、前缀、后缀。常用于生成 SQL IN 子句、JSON 数组片段或日志格式化:
-
joining(", ", "[", "]")→"[Hello, World, Java]" -
joining(" | ", "'", "'")→"'Hello' | 'World' | 'Java'" -
joining(",", "(", ")")→"(Hello,World,Java)"
注意事项与技巧
- 元素为
null时会抛NullPointerException,拼接前建议过滤或映射为非空值,例如:.map(Objects::toString)或.filter(Objects::nonNull) - 若元素是对象,需确保其
toString()方法返回有意义的内容,否则可先用map提取字段,如:stream.map(User::getName).collect(joining(", ")) - 性能良好,内部使用
StringJoiner,避免了频繁创建中间字符串,比用reduce或StringBuilder手动拼接更安全简洁
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











