Копировать элементы списка N раз, используя Stream API - PullRequest
5 голосов
/ 03 апреля 2019

Есть ли способ скопировать некоторый Список (или объединенную строку, если необходимо) N раз в Java, используя Stream API

Если список состоит из {"Hello", "world"} и N = 3, результат должен быть {"Hello", "world", "Hello", "world", "Hello", "world"}

То, что я до сих пор делал, - это получение комбинированного элемента String, и я не уверен, как выполнить его копирование N раз.Хотя я могу сделать это внешне, я хотел бы посмотреть, возможно ли это сделать с помощью потоков

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

Я хотел бы использовать поток, потому что я планирую продолжить другие операции с потоками послетот, что выше

Ответы [ 2 ]

6 голосов
/ 03 апреля 2019

Вы можете использовать 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]

для вашего образца ввода.

2 голосов
/ 03 апреля 2019

Вы можете использовать IntStream и flatMap для подключения списка text несколько раз:

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

Результат выглядит следующим образом:

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