import java.util.*;
import java.util.stream.*;
class Test {
public static void main (String [] args) {
int numbers[] = {1,2,3};
List<Integer> solution = new ArrayList<Integer>();
for(int i = 0; i < numbers.length; i++) {
int temp= 0;
for(int j = 0; j < numbers.length; j ++) {
if (i == j) continue;
temp += numbers[i] + numbers[j];
}
solution.add(temp);
}
System.out.println(solution);
}
}
ex: [1,2,3] = [ (1 + 2) + (1 + 3), (2 + 1) + (2 + 3), (3 + 2) + (3 + 1)] = [7, 8, 9]
从本质上讲,这会将列表中的所有其他元素相加。如何仅使用Java Streams编写此代码?
答案 0 :(得分:4)
每个输出元素为(sum of list) + (length of list - 2) * (input element)
。
因此,计算总和:
int sum = IntStream.of(numbers).sum();
然后:
List<Integer> solution =
IntStream.of(numbers)
.map(e -> sum + (numbers.length - 2) * e)
.boxed()
.collect(Collectors.toList());
答案 1 :(得分:1)
您可以使用:
List<Integer> solution = IntStream.range(0, numbers.length)
.map(i -> IntStream.range(0, numbers.length)
.filter(j -> i != j)
.map(j -> numbers[i] + numbers[j])
.sum()
).boxed()
.collect(Collectors.toList());
输出
[7, 8, 9]