将一个列表的所有 elements/object 复制 N 次到新列表。使用 java 8 流

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 和流编程。 我当前列表中共有 7 个水果,但我想循环 10 次将所有数据复制到新列表,如果索引中没有数据,那么我想添加具有增量 ID 的空对象。 我试过了,但没有得到预期的结果。

@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 的评论。