public class Main2 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(2,4,3,-5,-7);
Collections.sort(list);
int i = 0;
int j = list.size()-1;
int min = 1000;
while (true) {
int sum = list.get(i)+list.get(j);
if (mod(sum) < min) {
min = mod(sum);
}
if (sum < 0) {
i++;
}
else if (sum ==0 ) {
i++;
j--;
}
else {
j--;
}
if (j <= i) {
break;
}
}
System.out.println(min);
}
private static int mod(int sum) {
return sum < 0 ? -sum : sum;
}
}
上面的代码是通过添加任意两个元素来找到最接近零的和。但我无法弄清楚如何(不使用循环)流将有助于编写更清晰,可读的代码。如果没有太多逻辑,我在内部循环中看到了什么,然后使用流使代码更清晰。
答案 0 :(得分:2)
您可以对列表进行流式传输,然后flatMap
再次针对相同的流列表,然后使用流的min
方法。
代码肯定会更短,但无论是否更容易阅读都是在旁观者眼中:
int min = list.stream()
.flatMapToInt(i -> list.stream()
.filter(j -> !i.equals(j))
.mapToInt(j -> i + j)
)
.map(Math::abs)
.min()
.getAsInt();