Итерируемо за поточно предаване в Java

1. Общ преглед

В този кратък урок, нека преобразуваме обект на Java Iterable в поток и изпълним някои стандартни операции върху него.

2. Преобразуване на Iterable в поток

Интерфейсът Iterable е проектиран, имайки предвид общите положения и не предоставя никакъв метод stream () самостоятелно.

Просто казано, можете да го предадете на метода StreamSupport.stream () и да получите Stream от дадения Iterable екземпляр.

Нека разгледаме нашия Iterable екземпляр:

Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

И ето как можем да преобразуваме този Iterable екземпляр в поток:

StreamSupport.stream(iterable.spliterator(), false);

Обърнете внимание, че вторият параметър в StreamSupport.stream () определя дали полученият поток трябва да бъде успореден или последователен. Трябва да го зададете true, за паралелен поток .

Сега нека тестваме нашето изпълнение:

@Test public void givenIterable_whenConvertedToStream_thenNotNull() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false)); }

Също така, бърза странична бележка - потоците не могат да се използват повторно, докато Iterable е; той също осигурява метод spliterator () , който връща екземпляр java.lang.Spliterator върху елементите, описани от дадената Iterable .

3. Извършване на операция по поток

Нека извършим проста операция на потока:

@Test public void whenConvertedToList_thenCorrect() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); List result = StreamSupport.stream(iterable.spliterator(), false) .map(String::toUpperCase) .collect(Collectors.toList()); assertThat( result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM")); }

4. Заключение

Този прост урок показва как можете да конвертирате Iterable екземпляр в Stream екземпляр и да извършвате стандартни операции върху него, точно както бихте направили за всеки друг екземпляр на Collection .

Внедряването на всички кодови фрагменти може да бъде намерено в проекта Github.