MST

星途 面试题库

面试题:Java中如何使用Stream collect方法生成HashSet集合

请编写一段Java代码,使用Stream的collect方法将一个包含整数的List转换为HashSet,并说明在转换过程中可能涉及到的一些操作和注意事项。
49.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class ListToHashSetExample {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(1);
        integerList.add(2);
        integerList.add(3);

        Set<Integer> integerSet = integerList.stream()
                                             .collect(Collectors.toCollection(HashSet::new));

        System.out.println(integerSet);
    }
}

转换过程中涉及的操作:

  1. 流的创建:通过调用list.stream()方法将List转换为流,这样就可以对集合中的元素进行一系列的中间操作和终端操作。
  2. 中间操作:这里没有使用中间操作,如果有需要,可以在流上使用如filter(过滤元素)、map(转换元素)等中间操作来对元素进行处理。
  3. 终端操作:调用collect方法,这是一个终端操作,它将流中的元素收集到指定的集合类型中。Collectors.toCollection(HashSet::new)表示将流中的元素收集到一个新的HashSet中。

注意事项:

  1. 元素唯一性HashSet不允许有重复元素,所以在转换过程中,如果List中有重复的整数,在HashSet中只会保留一个。
  2. 空指针处理:如果List中包含null元素,HashSet会正常添加null,但如果在流的操作过程中对null元素进行某些特定操作(如调用null元素的方法),可能会抛出NullPointerException
  3. 性能:虽然Stream提供了简洁的操作方式,但在处理大数据量时,性能可能会受到影响。如果性能是关键因素,可能需要考虑更传统的循环方式手动添加元素到HashSet,这样可以减少一些流操作带来的额外开销。