在 Java 中,将 List 转换为 String 是一个非常常见的操作,主要有以下几种方法,适用于不同的场景。

哪种方法最好?
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
String.join() |
强烈推荐,适用于 List<String> 或任何可以轻松转为字符串的元素集合。 |
代码最简洁、可读性最高、性能好。 | 仅适用于 List<String> 或其他 CharSequence 的集合。 |
Stream |
非常灵活,适用于任何类型的 List,可以在拼接前对元素进行处理。 |
功能强大,可以链式调用,支持并行处理。 | 代码稍长,对于简单拼接来说有点“杀鸡用牛刀”。 |
| 手动循环 | 适用于 Java 8 之前的老版本,或者需要高度自定义拼接逻辑时。 | 灵活性最高,逻辑完全可控。 | 代码冗长,容易出错(如忘记处理最后一个分隔符)。 |
StringUtils.join() |
如果你已经在使用 Apache Commons Lang 或 Spring Framework。 | 功能强大,支持各种类型的集合。 | 需要引入第三方库。 |
使用 String.join() (最推荐,仅限 List<String>)
如果你的 List 中存放的就是 String 对象,这是最简单、最直接的方法。
语法:
String.join(CharSequence delimiter, List<String> list)
delimiter: 分隔符,用于在元素之间插入。list: 要连接的List<String>。
示例代码:
import java.util.Arrays;
import java.util.List;
public class ListToStringExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用逗号和空格作为分隔符
String result = String.join(", ", names);
System.out.println(result);
// 输出: Alice, Bob, Charlie
// 使用 " | " 作为分隔符
String resultWithPipe = String.join(" | ", names);
System.out.println(resultWithPipe);
// 输出: Alice | Bob | Charlie
// 使用空字符串作为分隔符(直接拼接)
String resultWithNoDelimiter = String.join("", names);
System.out.println(resultWithNoDelimiter);
// 输出: AliceBobCharlie
}
}
使用 Java 8 Stream API (最灵活)
这是现代 Java 中最通用、最强大的方法,它可以处理任何类型的 List,并且可以在拼接前对元素进行转换(调用 toString() 或其他方法)。

核心思想:
- 将
List转换为Stream(list.stream())。 - 使用
map()将流中的每个元素(非String类型)转换为它的字符串表示形式。 - 使用
Collectors.joining()来收集流中的元素并拼接成一个字符串。
示例代码:
场景 1: List<String> (与方法一效果相同)
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamToStringExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
String result = names.stream()
.collect(Collectors.joining(", "));
System.out.println(result);
// 输出: Alice, Bob, Charlie
}
}
场景 2: List<Integer> 或其他非 String 类型
这是 Stream 方法最强大的地方,我们可以轻松地将 Integer 转换为 String。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamToStringExample2 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 10, 25);
String result = numbers.stream()
// map(Object::toString) 等同于 .map(num -> num.toString())
.map(Object::toString)
.collect(Collectors.joining(" - "));
System.out.println(result);
// 输出: 1 - 2 - 3 - 10 - 25
}
}
场景 3: 拼接自定义对象列表
假设你有一个 Person 类,你想拼接 Person 对象的 name 属性。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class StreamToStringExample3 {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 拼接对象的 toString() 结果
String result1 = people.stream()
.map(Object::toString)
.collect(Collectors.joining(" | "));
System.out.println(result1);
// 输出: Person{name='Alice', age=30} | Person{name='Bob', age=25} | Person{name='Charlie', age=35}
// 拼接对象的 name 属性
String result2 = people.stream()
.map(Person::getName) // 方法引用,获取每个Person的name
.collect(Collectors.joining(", "));
System.out.println(result2);
// 输出: Alice, Bob, Charlie
}
}
使用传统的 for 循环 (适用于旧版 Java)
在 Java 8 之前,这是唯一的方法,虽然代码较长,但逻辑清晰,适用于任何 Java 版本。
核心思想:
- 创建一个
StringBuilder对象(比直接使用 拼接字符串性能更好)。 - 遍历
List中的每一个元素。 - 将元素添加到
StringBuilder中,并在元素后添加分隔符。 - 循环结束后,移除末尾多余的分隔符。
- 将
StringBuilder转换为String。
示例代码:
import java.util.Arrays;
import java.util.List;
public class LoopToStringExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
StringBuilder sb = new StringBuilder();
String delimiter = ", ";
for (String name : names) {
sb.append(name);
sb.append(delimiter);
}
// 移除最后一个分隔符
if (sb.length() > 0) {
sb.setLength(sb.length() - delimiter.length());
}
String result = sb.toString();
System.out.println(result);
// 输出: Alice, Bob, Charlie
}
}
使用 Apache Commons Lang 的 StringUtils.join()
如果你的项目已经依赖了 Apache Commons Lang 或 Spring Framework,可以使用 StringUtils 工具类。
Maven 依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 使用最新版本 -->
</dependency>
示例代码:
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
public class ApacheStringUtilsExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
String result = StringUtils.join(names, ", ");
System.out.println(result);
// 输出: Alice, Bob, Charlie
List<Integer> numbers = Arrays.asList(1, 2, 3);
// StringUtils.join 可以处理数组和集合,内部会自动调用 toString()
String numberResult = StringUtils.join(numbers, " - ");
System.out.println(numberResult);
// 输出: 1 - 2 - 3
}
}
List是List<String>,优先使用String.join(),它最简洁、高效。List是其他类型,或者需要复杂的转换逻辑,使用StreamAPI,它功能强大且是现代 Java 的标准做法。- 如果项目不允许使用 Java 8+ 或第三方库,使用
for循环和StringBuilder。 - 如果项目已经引入了 Apache Commons/Spring,
StringUtils.join()是一个方便的选择。
