我正在研究从数组中以不同方式求和为给定数字的两个整数对的问题。 我想使用 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/