面试题答案
一键面试- 使用Collectors.toList():
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamToListExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result1 = numbers.stream()
.collect(Collectors.toList());
System.out.println(result1);
}
}
特点:
- 这是最常用和简洁的方式,适用于大多数情况。
- 它会创建一个普通的
ArrayList
来存储收集到的元素,支持随机访问,在大多数场景下性能表现良好。
- 使用Collectors.collectingAndThen() 结合 ArrayList 的构造函数:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamToListExample2 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result2 = numbers.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(ArrayList::new),
ArrayList::new
));
System.out.println(result2);
}
}
特点:
- 这种方式先使用
Collectors.toCollection(ArrayList::new)
将元素收集到一个ArrayList
中,然后再通过ArrayList::new
对这个ArrayList
进行进一步处理(这里是重新创建了一个新的ArrayList
,可以在这一步进行一些初始化操作等)。 - 相比
Collectors.toList()
更加灵活,允许在收集完成后对结果集合进行自定义的操作,但如果只是简单收集到List
,这种方式略显复杂,一般用于有特殊需求的场景。