比较2个int数组中匹配的数字-java

比较2个int数组中匹配的数字-java,java,Java,大家好,有人建议用java比较两个数组的最快方法吗 返回交集数组的字符串 如果没有匹配项,则为“nil”值 static int [] WinnerNumbers; static int [] ClientNumbers; 在执行我的程序之后,我得到了两个填充数组WinnerNumber和ClientNumber,我需要对它们进行比较并返回一个匹配项或null 我想通过一个函数来实现这一点 public static String WinnerChecker(){ prize =

大家好,有人建议用java比较两个数组的最快方法吗 返回交集数组的字符串 如果没有匹配项,则为“nil”值

static int [] WinnerNumbers; static int [] ClientNumbers;
在执行我的程序之后,我得到了两个填充数组WinnerNumber和ClientNumber,我需要对它们进行比较并返回一个匹配项或null

我想通过一个函数来实现这一点

public static String WinnerChecker(){

      prize = (......)

      return prize;
}

使用赢家数组创建一个集合。对于客户端的每个号码,请检查该号码是否存在于集合中

集合包含的是O1 在上的客户端数组上迭代 总体复杂度将持续上升

private static String findWinners(int[] winnerNumbers, int[] clientNumbers) {
    Set<Integer> winnerNumberSet = IntStream.of(winnerNumbers).boxed().collect(Collectors.toSet());

    Optional<String> output = IntStream.of(clientNumbers)
            .filter(winnerNumberSet::contains)
            .mapToObj(String::valueOf)
            .reduce((result, element) ->
                    result + ", " + element);

    return output.orElse(null);
}

我会这样做。如果没有交集,它将返回一个空字符串,这就是我猜想你所说的nil

印刷品

459
如果两个数组中都存在重复项,并且输出中不需要这些重复项,则在mapToObj进程之前添加方法.distinct

如果希望以数组的形式返回结果,下面的方法可以起作用

    public static int[] getIntersection(int[] a, int[] b) {
        return Arrays.stream(a)
                .flatMap(i -> Arrays.stream(b).filter(k -> i == k))
                .toArray();

    }
另一种可能比上述方法更有效的方法是使用集合

    public static String getIntersection(int[] a, int[] b) {
        Set<Integer> seta =
                Arrays.stream(a).boxed().collect(Collectors.toSet());
        Set<Integer> setb =
                Arrays.stream(b).boxed().collect(Collectors.toSet());

        seta.retainAll(setb);
        return seta.stream().map(String::valueOf)
                .collect(Collectors.joining(""));
    }

如果需要,可以返回实际的集合。

希望下面的代码对您有用

 String prize="";
    int[] winnerNumbers={ 23,84,32,98,11};
    int[] clientNumbers ={ 82, 70,81,98,41,32};
    for(int i=0; i< winnerNumbers.length; i++){
        for(int j=0; j< clientNumbers.length; j++){

            if(winnerNumbers[i] == clientNumbers[j]){
                prize = prize + winnerNumbers[i] +" ";
            }
        }
    }
    System.out.println(prize);
这里执行线性搜索操作来定位数字。您可以根据数组大小选择Java8流类或其他搜索算法。有关更多搜索算法,请参阅下面的链接。

匹配是否必须处于匹配位置?例如,如果输入是{1,2,3,4}和{5,6,1,4},那么输出应该是{1,4}还是仅仅是{4}?嗨,GBlodgett,输出应该是{1,4}WJS。这个方法非常有效,我花了很多时间研究人们处理这个场景的方式,你的答案是迄今为止编码最简洁的。谢谢你,我注意到了这一点,我的优胜者中有两次是“6”。但这对我来说是有益的,因为我的项目没有在客户选择的每个元素中指定唯一的编号。如果b和a被切换,重复可能是一个问题,但在上下文中,重复发挥我的优势,我张贴更新我的答案,以消除这一点,如果需要的话。这很容易做到。有没有一种方法可以让你在你的第一个答案上贴上“第二个答案”——以防万一其他人想要返回数组。-从谷歌搜索这个,资源是可怕的,所以我认为原始的也将是非常有帮助的人谁想返回数组,而不是像myselfHi沙哈瓦特字符串,谢谢你的答案,我会尝试它作为一种替代方式来实现我的功能。我真的很喜欢你的返回函数,将来会用到它。再次感谢你,谢谢你的帮助。我会尝试一下作为替代品。尝试一下下面来自WJS的代码,这是一种没有很多循环和迭代的新方法。再次感谢各位:
 String prize="";
    int[] winnerNumbers={ 23,84,32,98,11};
    int[] clientNumbers ={ 82, 70,81,98,41,32};
    for(int i=0; i< winnerNumbers.length; i++){
        for(int j=0; j< clientNumbers.length; j++){

            if(winnerNumbers[i] == clientNumbers[j]){
                prize = prize + winnerNumbers[i] +" ";
            }
        }
    }
    System.out.println(prize);