[英]Copy All the elements/object of one list N times to new list. Using java 8 stream
将一个列表的所有元素复制 N 次到一个新列表中。
我有 Fruits 列表,我想迭代 N 次并将所有值添加到新列表,但在列表中我们的迭代次数少于我的迭代次数,所以我想添加具有增量 ID 的 Empty fruits。 如何使用 java 8 和 stream 编程。 我当前列表中共有 7 个水果,但我想循环 10 次将所有数据复制到新列表,如果索引中没有数据,那么我想添加带有增量 ID 的空 object。 我试过了但没有得到预期的结果。
@Data
@AllArgsConstructor
public class Fruit {
int id;
String type;
}
List<Fruit> fruits = new ArrayList<>();
fruits.add(new Fruit(1, "mango"));
fruits.add(new Fruit(2, "grapes"));
fruits.add(new Fruit(3, "apple"));
fruits.add(new Fruit(4, "banana"));
fruits.add(new Fruit(5, "papaya"));
fruits.add(new Fruit(6, "jack fruit"));
fruits.add(new Fruit(7, "dragon fruit"));
List<Fruit> newFruits = new ArrayList<>();
fruits.stream().map(value -> {
IntStream.rangeClosed(1, 10).forEach(index -> {
if (value.equals(null))
newFruits.add(new Fruit(index, ""));
else
newFruits.add(value);
});
return null;
});
预期的 OP:对于 newFruits
newFruits :
[Fruit(id=1, type=mango),
Fruit(id=2, type=grapes),
Fruit(id=3, type=apple),
Fruit(id=4, type=banana),
Fruit(id=5, type=papaya),
Fruit(id=6, type=jack fruit),
Fruit(id=7, type=dragon fruit),
Fruit(id=8, type="").
Fruit(id=9, type=")
Fruit(id=10, type="")]
Streams 可能不是完成此任务的正确工具。 为什么不直接将原始列表中的所有元素添加到新列表中,并在找到最大 id 后计算要添加多少个新条目? 就像是:
List<Fruit> newFruits = new ArrayList<>();
newFruits.addAll(fruits);
int N = 10;
int toAdd = N - fruits.size();
int maxId = fruits.stream().mapToInt(Fruit::getId).max().orElse(0);
IntStream.rangeClosed(1,toAdd).forEach(i -> newFruits.add(new Fruit(maxId + i, "")));
或者看看@Holger 的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.