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):带分隔符、前缀和后缀
示例代码:
Listwords = 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免费学习笔记(深入)”;
ListlistWithNull = 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 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+ 中处理字符串拼接的推荐方式。










