joining是stream api中高效字符串拼接收集器,底层复用stringbuilder并预估容量,提供无分隔符、仅分隔符、带前后缀三种重载,支持map转换后拼接,需手动处理null,空集合返回空字符串。

Java Stream API 中的 joining 是专门用于字符串拼接的收集器,它底层复用 StringBuilder,避免了中间对象创建和重复拷贝,比手动循环 + + 或 StringBuffer 更高效、更简洁。
使用 joining 收集器拼接字符串
Collectors.joining() 提供三个重载方法,分别对应无分隔符、仅分隔符、以及带前缀与后缀的拼接:
-
joining():直接连接所有元素,如["a","b","c"] → "abc" -
joining(CharSequence delimiter):用指定分隔符连接,如joining(", ") → "a, b, c" -
joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix):带前后缀,如joining(", ", "[", "]") → "[a, b, c]"
结合 map 转换后再拼接
实际中常需先对元素做格式化(比如提取字段、加引号、转小写),再拼接。推荐在 map() 阶段完成转换,再用 joining() 收集:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
List<person> people = List.of(new Person("Alice"), new Person("Bob"));
String names = people.stream()
.map(Person::getName)
.map(name -> "\"" + name + "\"")
.collect(Collectors.joining(", ", "[", "]"));
// 结果:["Alice", "Bob"]
</person>
注意 null 和空集合的处理
joining 本身不处理 null 元素,遇到 null 会抛 NullPointerException。安全做法是提前过滤或映射为默认值:
- 过滤 null:
.filter(Objects::nonNull) - 替换 null:
.map(s -> s != null ? s : "N/A") - 空集合时
joining返回空字符串(不是null),无需额外判空
性能优于传统方式的原因
joining 内部使用可变长度的 StringBuilder,且预估总长度(通过流大小 × 平均字符数),减少扩容次数;而 String + 在循环中每次都会新建对象,StringBuffer 虽线程安全但有同步开销。对于中等以上规模数据(百个以上字符串),差距明显。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










