我已经用不同的方法实现了相同的功能,有人可以告诉我为什么我的最后一个功能不会打印错误吗?

来源:爱站网时间:2021-09-16编辑:网友分享
public static void main(String [] args){System.out.println(hasPairWithSum(new int [] {12,4,3,4,1,7},9)); System.out.println(hasPairWithSum2(new int [] {12,4,3,4,1,7},...

问题描述


public static void main(String[] args) {         
  System.out.println(hasPairWithSum(new int[] { 12, 4, 3, 4, 1, 7 }, 9));        
  System.out.println(hasPairWithSum2(new int[] { 12, 4, 3, 4, 1, 7 }, 9));       
  System.out.println(hasPairWithSum3(new int[] { 12, 4, 3, 4, 1, 7 }, 9));  
}

public static boolean hasPairWithSum(int[] intArray, int sum) {         
  int len = intArray.length;        
  for (int i = 0; i  mySet = new HashSet();
    int len = intArray.length;
    for (int i = 0; i  mySet = new HashSet();
    int len = intArray.length;
    return IntStream.range(0, len).mapToObj(i -> {
        if (mySet.contains(intArray[i])) {
                return true;
        }
        mySet.add(sum - intArray[i]);
        return false;
    }) != null;
}

思路一:


首先,应将mapToObj功能替换为forEach。然后,我将匹配的对添加到数组列表(对)。

这里是您的问题的解决方案,灵感来自https://www.baeldung.com/java-algorithm-number-pairs-sum

public static boolean hasPairWithSum3(int[] intArray, int sum) {
    Map pairs = new HashMap();
    List resultingPairs = new ArrayList();

    IntStream.range(0, intArray.length).forEach(i -> {
        if (pairs.containsKey(intArray[i])) {
            if (pairs.get(intArray[i]) != null) {
                resultingPairs.add(new int[]{intArray[i], sum - intArray[i]});
            }
            pairs.put(sum - intArray[i], null);
        } else if (!pairs.containsValue(intArray[i])) {
            pairs.put(sum - intArray[i], intArray[i]);
        }
    });


    return !resultingPairs.isEmpty();
}

思路二:


流在Java中是惰性的。您需要校准终止函数才能开始评估流

“ Stream mapToObj(IntFunction mapper)”是终止的函数,它始终返回Stream对象,并且它始终不为null。

您可以像这样修改您的代码,但是我不确定使用流是一种好习惯:

public static boolean hasPairWithSum3(int[] intArray, int sum) {         
    HashSet mySet = new HashSet();
    int len = intArray.length;
    return IntStream.range(0, len).anyMatch(i -> {
        if (mySet.contains(intArray[i])) {
                return true;
        }
        mySet.add(sum - intArray[i]);
        return false;
    });
}

上一篇:等待x毫秒或直到条件变为真

下一篇:将一个对象映射到java流中的多个对象[重复]

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载