Collectors.joining可实现字符串拼接,基本用法无分隔符,如String result = names.stream().collect(Collectors.joining()); 常用joining(CharSequence delimiter)添加分隔符,如逗号;支持前缀后缀格式化输出,如Collectors.joining(“, “, “[“, “]”)生成[Alice, Bob];结合map提取对象属性并处理NULL值,提升代码健壮性。

在Java中,当我们需要将集合中的元素拼接成一个字符串时,Collectors.joining 是一个非常实用的工具。它属于 java.util.stream.Collectors 类,常与流(Stream)配合使用,能够简洁高效地完成字符串拼接任务。下面详细介绍它的用法和常见技巧。
基本拼接:无分隔符
最简单的用法是将集合中的每个元素直接拼接成一个字符串,不加任何分隔符。
List
String result = names.stream().collect(Collectors.joining());
// 输出:AliceBobCharlie
这种方式适用于不需要分隔的情况,但通常我们更希望有分隔符。
添加分隔符:使用joining(CharSequence delimiter)
最常见的需求是在元素之间加入逗号、顿号或其它符号。
立即学习“Java免费学习笔记(深入)”;
String result = names.stream().collect(Collectors.joining(“, “));
// 输出:Alice, Bob, Charlie
传入一个字符串作为分隔符,就能轻松实现格式化输出,适合生成列表字符串。
前缀与后缀:使用joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
如果想让拼接结果像一个完整的表达式或包含括号,可以使用完整参数版本。
String result = names.stream()
.collect(Collectors.joining(“, “, “[“, “]”));
// 输出:[Alice, Bob, Charlie]
这个方法接收三个参数:
- delimiter:元素之间的分隔符
- prefix:整个字符串的前缀
- suffix:整个字符串的后缀
非常适合生成日志信息或结构化文本。
结合对象属性拼接
实际开发中,集合往往存储的是对象,我们需要拼接某个字段。这时可先用 map() 提取字段再拼接。
class User {
private String name;
// 构造函数、getter等略
}
List
String names = users.stream()
.map(User::getName)
.collect(Collectors.joining(” | “));
// 输出:Alice | Bob
这种链式操作清晰明了,是处理对象集合的标准做法。
空值处理与健壮性建议
如果集合中可能含有 null 值,直接拼接会抛出异常或产生 “null” 字符串。建议提前过滤或替换。
String result = list.stream()
.Filter(Objects::nonNull)
.collect(Collectors.joining(“, “));
或者用 map 处理 null 情况:
.map(s -> s == null ? “未知” : s)
基本上就这些。Collectors.joining 用起来简单,但组合性强,配合 Stream API 能应对大多数字符串拼接场景。掌握好分隔符、前后缀和属性提取技巧,能让代码更清晰高效。


