java - 使用函数从 Java 8 中总和为给定数字的数组中查找一对整数

标签 java arrays functional-programming java-8

我正在研究从数组中以不同方式求和为给定数字的两个整数对的问题。 我想使用 Java 8 函数。我试过这样的事情:

    for (int i = 0; i < arr.length; i++) {
        List<Integer> res = IntStream.of(arr).boxed().filter(x -> x + arr[i] == givenNumber)
                                .collect(Collectors.toList());
    }

但它不会工作(错误)因为“arr[i]”不是最终的并且在我的方法中不能是最终的。可以这样: filter(x -> y -> x + y == givenNumber) 和来自 arr 的 x 和 y 以某种方式工作?

那么这可以在 Java 8 中使用函数式编程来完成吗?如果答案是肯定的,那又如何呢?

最佳答案

可以使它们最终化。如果不出意外,你可以写

for (int i = 0; i < arr.length; i++) {
    final int[] arrFinal = arr;
    final int iFinal = i;
    List<Integer> res = IntStream.of(arr).boxed()
        .filter(x -> x + arrFinal[iFinal] == givenNumber)
        .collect(Collectors.toList());
}

虽然我会把它写成

for (int i = 0; i < arr.length; i++) {
    int target = givenNumber - arr[i];
    List<Integer> res = IntStream.of(arr).filter(x -> x == target)
                           .boxed().collect(Collectors.toList());
}

...这也清楚地表明,就其值(value)而言,您将拥有一个重复多次的单个值列表,这可能首先会 reshape 您的程序。

关于java - 使用函数从 Java 8 中总和为给定数字的数组中查找一对整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811127/

相关文章:

java - 多线程环境下使用的UDP Socket.receive()方法

java - 如何解决没有这样的方法错误

javascript - Javascript 对象类似于 SQL 'JOIN'?

javascript - 如何在javascript中将数据从旧json复制到新json?

python - 如何在Python中链接文件对象?

functional-programming - 为什么define-syntax of or in scheme需要考虑三个条件?

haskell - 我对Euler#92计划的尝试太慢

java - 需要有关 Java 中通配符泛型类型的帮助

Javascript:测试至少一个非空数组(如果其中一个数组可能为空)

java - 简单的计算器操作