使用Stream API创建对象初始化循环

时间:2018-03-23 18:18:14

标签: java java-8 java-stream

我有一组可用作列表的常量值。使用这些值我必须创建一个键值对对象,并且必须将此对象添加到列表中。我想在JAVA 8中使用Stream API实现这一点。下面是使用for循环的示例实现

for (int i=0; i<length; i+=2){    
    list.add(new sampleObject(constant[i],constant[i+1]);
}

这可以使用流减少操作来实现吗?

2 个答案:

答案 0 :(得分:3)

当然可以!

IntStream.iterate(0, i -> i < length, i -> i + 2)
         .mapToObj(i -> new sampleObject(constant[i], constant[i+1]))
         .collect(Collectors.toList());

我不确定,但constant可能必须final或有效final才能编译。

注意:我刚刚意识到,在Java 9中添加了这个重载的iterate方法。请参阅davidxxx's answer了解Java 8解决方案!

答案 1 :(得分:3)

使用IntStream.iterate()生成无限IntStream以使其有限的链IntStream.limit()

List<sampleObject> list = 
    IntStream.iterate(0, i -> i + 2)
              .limit(Math.ceil(length / 2D))
              .mapToObj(i -> new sampleObject(constant[i], constant[i+1]))
              .collect(Collectors.toList());