首页 > 解决方案 > 将一个元素与列表中的所有其他元素相加

问题描述

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 编写此内容?

标签: javajava-8java-stream

解决方案


每个输出元素是(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());

推荐阅读