题目:给定两个数组 nums1
和 nums2
,返回 它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
思路:为避免记录重复元素,使用set。扫描一遍nums1,把它的元素记录到set中(不记录重复元素)。扫描一遍nums2,若nums2的元素在set中则记录到result中,否则跳过。
代码:
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set=new HashSet<>();
Set<Integer> result=new HashSet<>();
for(int i:nums1){
set.add(i);
}
for(int i:nums2){
if(set.contains(i)){
result.add(i);
}
}
int[] res=result.stream().mapToInt(Integer::intValue).toArray();
return res;
}
stream流:在Java中,Stream
(流)是Java 8引入的一个新的抽象概念,它使得可以以一种声明的方式处理数据集合。Stream
使得开发者可以更加便捷地对集合(如数组、列表)进行各种操作,比如过滤、映射、排序、聚合等,而不必显式地使用迭代器或者循环。
mapToInt():是 Stream API 提供的一个方法,它用于将流中的元素映射为整数类型。具体来说,它可以用于将一个流中的元素映射为 int
类型的数据。
IntStream mapToInt(ToIntFunction<? super T> mapper)
参数 mapper
:这是一个函数式接口 ToIntFunction
,它定义了一个函数 applyAsInt(T value)
,用于将流中的元素类型 T
映射为 int
类型。在 mapToInt()
方法中,你需要传入一个 ToIntFunction
实现,该实现接受一个流中的元素,并返回一个 int
值作为映射结果。
在代码中Integer::intValue
是一个方法引用,用于引用 Integer
类的 intValue()
方法。这种方式通常用于函数式接口的实现,特别是在使用 Stream API 进行流操作时,可以简洁地表示一个函数或者方法。