将元素与列表中的所有其他元素求和

时间:2019-08-12 21:53:59

标签: java java-8 java-stream

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编写此代码?

2 个答案:

答案 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]