java stream api 实现将流收集为 list,核心方法是调用 collect(collectors.tolist())。该操作会遍历流中的元素,并将它们依次添加到返回的列表中。如果需要指定具体的 list 实现类(如 arraylist),应使用 collect(collectors.tocollection(arraylist::new))。此过程是终端操作,执行后流即被消费。

Collectors.toList() 与 toCollection 的区别是什么
Collectors.toList() 返回的是一个不保证类型的可变列表,而 Collectors.toCollection() 允许开发者明确指定 List 的具体实现类型。前者适用于不需要特定 List 实现的场景,后者适用于需要 ArrayList、LinkedList 等具体类型的场景。

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> stream = Stream.of("A", "B", "C");
// 使用 toList()
List<String> list1 = stream.collect(Collectors.toList());
System.out.println("toList result: " + list1);
Stream<String> stream2 = Stream.of("D", "E", "F");
// 使用 toCollection()
List<String> list2 = stream2.collect(Collectors.toCollection(ArrayList::new));
System.out.println("toCollection result: " + list2);
}
}
如何确保收集结果为不可变列表
若需获得不可变列表,应使用 Collectors.toUnmodifiableList()(Java 10+)。该方法返回的列表在尝试修改时会抛出 UnsupportedOperationException,适合用于保护数据不被意外修改的场景。
立即学习“Java免费学习笔记(深入)”;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> stream = Stream.of("X", "Y", "Z");
List<String> unmodifiableList = stream.collect(Collectors.toUnmodifiableList());
// unmodifiableList.add("W"); // 这将抛出异常
System.out.println(unmodifiableList);
}
}


















