将java Stream和Lambda表达式用于嵌套循环

时间:2017-03-27 15:02:51

标签: java java-8 java-stream

我想用Streams和lambda表达式替换下面的代码

List < Obj > list=service.getList();
double value = 0.0;  
 for(int i=0;i<100;i++){  
  if((i+12)<100){
  for(int j=i;j<i + 12 ; j++){   
   value=1+value*Double.parseDouble(list.get(j).getValue())
   }
   }
  }
}

有没有最好的方法呢?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

List<Obj> list = service.getList();
double value = IntStream.range(0, 100 - 12)
    .flatMap(i -> IntStream.range(i, i + 12))
    .mapToDouble(j -> Double.parseDouble(list.get(j).getValue()))
    .reduce(0, (acc, e) -> 1 + acc * e);