使用Stream API将列表元素复制N次

时间:2019-04-03 11:05:09

标签: java list java-stream

是否有一种方法可以使用Stream API在Java中复制某些列表(或必要时组合字符串)N次

如果列表包含{"Hello", "world"}且N = 3,则结果应为{"Hello", "world", "Hello", "world", "Hello", "world"}

到目前为止,我要做的是合并String元素,但我不确定如何进行N次复制。虽然我可以在外部进行操作,但我想看看是否可以借助流来完成

Optional<String> sentence = text.stream().reduce((value, combinedValue) -> { return value + ", " + combinedValue ;});

我想使用流,因为我计划在上述操作之后继续进行其他流操作

2 个答案:

答案 0 :(得分:6)

您可以使用Collections.nCopies

List<String> output =
    Collections.nCopies(3,text) // List<List<String>> with 3 copies of 
                                // original List
               .stream() // Stream<List<String>>
               .flatMap(List::stream) // Stream<String>
               .collect(Collectors.toList()); // List<String>

这将产生List

[Hello, World, Hello, World, Hello, World]

作为示例输入。

答案 1 :(得分:2)

您可以使用IntStreamflatMap多次连接text列表:

List<String> result = IntStream.range(0, 3)
        .mapToObj(i -> text)
        .flatMap(List::stream)
        .collect(Collectors.toList());

结果如下:

[Hello, World, Hello, World, Hello, World]