在Java8中将两个ArrayLists相乘和求和

Mub*_*bin 6 java java-8 java-stream

我有两个名为A和B的ArrayLists,大小相等,包含一些数字.现在我要计算这样的事情:

int sum = 0;
for(int i=0; i<A.size() && i<B.size(); i++) {
  sum += A.get(i)*B.get(i);
}
Run Code Online (Sandbox Code Playgroud)

如何在不使用任何额外的用户定义方法的情况下,通过使用Java 8功能(流,lambda表达式等)来实现上面的工作,计算总和?

Bri*_*etz 15

int sum = 
    IntStream.range(0, min(a.size(), b.size())
             .map(i -> a.get(i) * b.get(i))
             .sum();
Run Code Online (Sandbox Code Playgroud)

  • @Mubin IntStream.range生成索引流,而不是要乘以的值流.无论包含的类型如何,所有列表都可以通过整数索引进行索引. (3认同)
  • @Mubin - 对于支持位置访问的任何集合,它将"按原样"工作. (2认同)
  • 为了使用带有Double值的ArrayLists,我不得不使用mapToDouble而不是map,否则会导致类型不匹配:无法从double转换为int。 (2认同)