Stream из Array

Как мне получить поток из Item массива Array<Array<Item>>?


Ответы (3 шт):

Автор решения: Roman
val temp = ArrayList<Item>()
val items = Array<Array<Item>>()

override fun getAllItems(): Stream<Item>
{
    temp.clear()
    items.forEach { it.forEach { temp.add(it) } }
    return temp.stream()
}
→ Ссылка
Автор решения: Podushkoved

Может, наведет на нужные мысли. Реализация на Java:

ArrayList<ArrayList<String>> lists = new ArrayList<>();

ArrayList<String> list1 = new ArrayList<>(Arrays.asList("A", "b", "c", "_"));
ArrayList<String> list2 = new ArrayList<>(Arrays.asList("D", "e", "f", ".."));

lists.add(list1);
lists.add(list2);

lists.stream().flatMap(Collection::stream).forEach(System.out::print); // Abc_Def..
→ Ссылка
Автор решения: IR42

items.flatten().stream() - то же самое, что и в вашем ответе. Только что ваше решение, что flatten создают лишнюю коллекцию. Это может быть быстрее на маленьких коллекциях, но на больших уже будет приводить ко всё большим потерям производительности. Это можно исправить, избежав создание этой лишней коллекции:

Arrays.stream(items).flatMap { Arrays.stream(it) }

Но Stream - это java api, в Котлине есть свой эквивалент - Sequence, с более удобным Api, заточенным под Котлин.

items.asSequence().flatMap { it.asSequence() }

→ Ссылка