You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java 8 Stream API找出两个整数数组中的重复元素

使用Java 8 Stream API找出两个数组的重复元素

我有两个整数数组:

int arr1[] = {1,2,3,4};
int arr2[] = {2,3,5,6};

已经用Java 7实现了找出重复元素的功能,代码如下:

public class FindDuplicates {
    public static void main(String[] args) {
        int arr1[] = {1, 2, 3, 4};
        int arr2[] = {2, 3, 5, 6};

        // 使用双重循环查找重复元素
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    System.out.println("Duplicate: " + arr1[i]);
                }
            }
        }
    }
}

用Java 8 Stream API实现的两种方式

方式一:基于Set的高效查找(推荐)

将其中一个数组转换为Set,利用Set的O(1)快速查找特性过滤另一个数组的重复元素,这种方式时间复杂度更低,适合大数据量场景:

import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

public class FindDuplicatesWithStream {
    public static void main(String[] args) {
        int arr1[] = {1, 2, 3, 4};
        int arr2[] = {2, 3, 5, 6};

        // 将arr1转换为Set,用于快速查找
        Set<Integer> arr1Elements = Arrays.stream(arr1)
                                         .boxed() // 将int基本类型装箱为Integer
                                         .collect(Collectors.toSet());

        // 过滤arr2中存在于arr1Elements的元素,同时去重避免重复输出
        Arrays.stream(arr2)
              .boxed()
              .filter(arr1Elements::contains)
              .distinct()
              .forEach(num -> System.out.println("Duplicate: " + num));
    }
}

方式二:直接通过Stream的anyMatch过滤

这种写法更简洁,但效率和Java 7的双重循环类似(时间复杂度O(n*m)),适合小数据量场景:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FindDuplicatesWithStream {
    public static void main(String[] args) {
        int arr1[] = {1, 2, 3, 4};
        int arr2[] = {2, 3, 5, 6};

        // 过滤arr1中存在于arr2的元素,收集为列表后输出
        List<Integer> duplicates = Arrays.stream(arr1)
                                         .boxed()
                                         .filter(num -> Arrays.stream(arr2).anyMatch(n -> n == num))
                                         .collect(Collectors.toList());

        duplicates.forEach(num -> System.out.println("Duplicate: " + num));
    }
}

两种方式的输出结果均为:

Duplicate: 2
Duplicate: 3

内容的提问来源于stack exchange,提问作者Janvi Kadu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:05:30