我有一组可用作列表的常量值。使用这些值我必须创建一个键值对对象,并且必须将此对象添加到列表中。我想在JAVA 8中使用Stream API实现这一点。下面是使用for循环的示例实现
for (int i=0; i<length; i+=2){
list.add(new sampleObject(constant[i],constant[i+1]);
}
这可以使用流减少操作来实现吗?
答案 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());