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);
}
}
转换过程中涉及的操作:
- 流的创建:通过调用
list.stream()
方法将List
转换为流,这样就可以对集合中的元素进行一系列的中间操作和终端操作。
- 中间操作:这里没有使用中间操作,如果有需要,可以在流上使用如
filter
(过滤元素)、map
(转换元素)等中间操作来对元素进行处理。
- 终端操作:调用
collect
方法,这是一个终端操作,它将流中的元素收集到指定的集合类型中。Collectors.toCollection(HashSet::new)
表示将流中的元素收集到一个新的HashSet
中。
注意事项:
- 元素唯一性:
HashSet
不允许有重复元素,所以在转换过程中,如果List
中有重复的整数,在HashSet
中只会保留一个。
- 空指针处理:如果
List
中包含null
元素,HashSet
会正常添加null
,但如果在流的操作过程中对null
元素进行某些特定操作(如调用null
元素的方法),可能会抛出NullPointerException
。
- 性能:虽然
Stream
提供了简洁的操作方式,但在处理大数据量时,性能可能会受到影响。如果性能是关键因素,可能需要考虑更传统的循环方式手动添加元素到HashSet
,这样可以减少一些流操作带来的额外开销。