collectors.joining用于将流中元素合并为字符串,支持无分隔符、指定分隔符、带前缀后缀三种形式,可结合filter过滤null值,map提取字段,实现安全高效的字符串拼接。

在Java中,Collectors.joining 是一个非常实用的工具,用于将流(Stream)中的元素合并成一个字符串。特别适用于处理字符串集合的拼接操作,比如 List
使用 Collectors.joining 拼接字符串集合
最常见的方式是通过 Stream API 配合 Collectors.joining() 方法来实现字符串合并。该方法有三种重载形式:
- joining():直接拼接,无分隔符
- joining(CharSequence delimiter):使用指定分隔符
- joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix):带分隔符、前缀和后缀
示例代码:
List<String> words = Arrays.asList("Java", "Python", "C++");
// 使用逗号分隔
String result1 = words.stream()
.collect(Collectors.joining(", "));
System.out.println(result1); // 输出:Java, Python, C++
// 添加分号分隔,并加中括号包围
String result2 = words.stream()
.collect(Collectors.joining("; ", "[", "]"));
System.out.println(result2); // 输出:[Java; Python; C++]
处理 null 值或空集合的情况
如果集合中包含 null 元素,直接拼接会抛出异常或输出 "null" 字符串。建议提前过滤或替换:
立即学习“Java免费学习笔记(深入)”;
List<String> listWithNull = Arrays.asList("Apple", null, "Banana", "", "Cherry");
String safeJoin = listWithNull.stream()
.filter(s -> s != null && !s.trim().isEmpty()) // 过滤 null 和空字符串
.collect(Collectors.joining(", "));
System.out.println(safeJoin); // 输出:Apple, Banana, Cherry
自定义对象字段拼接
不仅限于字符串列表,还可以从对象列表中提取字段后拼接:
class Person {
String name;
Person(String name) { this.name = name; }
String getName() { return name; }
}
List<Person> people = Arrays.asList(new Person("Alice"), new Person("Bob"));
String names = people.stream()
.map(Person::getName)
.collect(Collectors.joining(" | "));
System.out.println(names); // 输出:Alice | Bob
基本上就这些。Collectors.joining 简洁高效,适合大多数字符串合并场景,配合 filter、map 等中间操作能应对复杂需求,是 Java 8+ 中处理字符串拼接的推荐方式。










