MST

星途 面试题库

面试题:Java中Stream的collect方法生成List集合的常见方式

请举例说明如何使用Java Stream的collect方法将Stream中的元素收集到一个List集合中,至少给出两种不同的实现方式,并解释每种方式的特点。
35.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 使用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 来存储收集到的元素,支持随机访问,在大多数场景下性能表现良好。
  1. 使用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,这种方式略显复杂,一般用于有特殊需求的场景。