Java推荐使用String.join()和Collectors.joining()高效拼接字符串:前者简洁高效、适用于集合或数组,不支持null;后者适合Stream链式处理,可加前缀后缀,二者均需预处理null。

Java 中没有字符串的 join 方法,但有 静态工具方法 可以高效合并集合元素——最推荐的是 String.join() 和 Collectors.joining()。
用 String.join() 快速拼接(推荐)
这是最简洁、高效的方式,适用于 Iterable(如 List、Set)或数组,底层直接使用 StringBuilder,无额外对象开销。
- 语法:
String.join(分隔符, collection)或String.join(分隔符, strArray) - 支持
null元素?❌ 不支持,遇到null会抛NullPointerException;需提前过滤或替换 - 示例:List<String> list = Arrays.asList("a", "b", "c");
String result = String.join("-", list); // 得到 "a-b-c"
用 Stream + Collectors.joining()(适合链式处理)
当已有 Stream 流程(如过滤、映射后合并),用 Collectors.joining() 更自然,性能与 String.join() 相当。
- 基础用法:
list.stream().collect(Collectors.joining("-")) - 支持前缀/后缀:
joining("-", "[", "]")→ "[a-b-c]" - 可结合
map处理非字符串类型:listOfInts.stream().map(String::valueOf).collect(Collectors.joining(","))
注意 null 和空值处理
两者默认都不容忍 null。若集合可能含 null,建议先转换:
立即学习“Java免费学习笔记(深入)”;
- 用
Objects.toString(obj, "null")统一转为字符串 - 或过滤掉
null:list.stream().filter(Objects::nonNull).collect(...) - 避免用传统 for 循环 +
+=拼接,那会频繁创建新字符串,效率低
不推荐:Apache Commons Lang 的 StringUtils.join()
虽功能丰富(自动跳过 null、支持任意类型),但引入第三方依赖不必要。JDK 8+ 完全可用原生方案替代。


















