Java 使用流API创建对象初始化循环
我有一组常量值,可以作为列表使用。使用这些值,我必须创建一个键值对对象,并且必须将该对象添加到列表中。我想用Java8中的流API来实现这一点。下面是使用for循环的示例实现Java 使用流API创建对象初始化循环,java,java-8,java-stream,Java,Java 8,Java Stream,我有一组常量值,可以作为列表使用。使用这些值,我必须创建一个键值对对象,并且必须将该对象添加到列表中。我想用Java8中的流API来实现这一点。下面是使用for循环的示例实现 for (int i=0; i<length; i+=2){ list.add(new sampleObject(constant[i],constant[i+1]); } for(inti=0;i当然可以 IntStream.iterate(0, i -> i < length, i
for (int i=0; i<length; i+=2){
list.add(new sampleObject(constant[i],constant[i+1]);
}
for(inti=0;i当然可以
IntStream.iterate(0, i -> i < length, i -> i + 2)
.mapToObj(i -> new sampleObject(constant[i], constant[i+1]))
.collect(Collectors.toList());
IntStream.iterate(0,i->ii+2)
.mapToObj(i->new sampleObject(常数[i],常数[i+1]))
.collect(Collectors.toList());
我不太清楚,但是constant
可能必须是final
或实际上是final
才能编译
注意:我刚刚意识到,这个重载的iterate
方法是在Java 9中添加的。请查看Java 8解决方案!链IntStream.iterate()
,它通过IntStream.limit()
生成无限的IntStream
,使其有限:
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());
列表=
迭代(0,i->i+2)
.限值(数学单元(长度/2D))
.mapToObj(i->new sampleObject(常数[i],常数[i+1]))
.collect(Collectors.toList());
如果要从Arrays.stream开始(常量),没有很好的方法来配对这样的流的元素。for循环是最清晰的解决方案imho。limitconstant中的某个地方应该有2的除法,它将是一个数组,该数组的值可以在以后在类中定义,但一旦定义就不会更改。这就足够了吗?@JavaiMaster只要常量
没有被赋值,那么你就没事了。如果我是你,我会坚持使用for循环;它更直观。@Jacob G。iterate()的第二个参数是IntUnaryOperator
。我不理解lambda的含义。你能解释一下吗?@davidxxx当然!我使用了接受三个参数的(我刚刚意识到这是在Java 9中添加的)。因为这个问题被标记为Java-8
,我认为你的答案应该被接受。@Jacob好吧!Java 9中优秀的重载在Java 8中遗漏了:处理奇数长度的Math.ceil()
非常难看而且容易出错。