Java Streams API汇总索引的列表

dot*_*abs 5 java java-8 java-stream

我想知道是否有更有效的方法来对所有树列表求和 - 在相同的索引处对它们的值求和.

之所以我问它是因为,可能使用Streams API,它可以使它更通用,适用于任意数量的列表.

List<Double> listA = getListA();
List<Double> listB = getListB();
List<Double> listC = getListC();

int listsSize = listA.size();

    List<?> collect = IntStream.range(0, listsSize)
            .mapToObj(i -> listA.get(i) + listB.get(i) + list(C).get(i))
            .collect(toList());
Run Code Online (Sandbox Code Playgroud)

感谢任何见解.

Bri*_*etz 5

这个怎么样:

List<List<Double>> lists = ...;

// ensure all lists are same size, and get size
int[] sizes = lists.stream().mapToInt(List::size).distinct().toArray();
if (sizes.length != 1)
    throw ...
int size = sizes[0];

double[] sums =
    IntStream.range(0, size)
             .mapToDouble(i -> lists.stream().mapToDouble(list -> list.get(i)).sum())
             .toArray();
Run Code Online (Sandbox Code Playgroud)

  • @ user2336315修正了拼写错误.你对"限制"的建议是可以的,但坦白说我不会打扰; 额外的"成本"只会在你要抛出异常之前出现.意志失败路径上的小优化很少值得额外的复杂性. (2认同)