1. Обзор
В этом коротком уроке давайте преобразуем объект Java Iterable в Stream и выполним над ним некоторые стандартные операции.
2. Преобразование итерируемого в поток
Интерфейс Iterable разработан с учетом общности и не предоставляет никакого метода stream() самостоятельно.
Проще говоря, вы можете передать его в метод StreamSupport.stream() и получить Stream из данного Итерируемый экземпляр.
Давайте рассмотрим наш Итерируемый экземпляр:
Iterableiterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
И вот как мы можем преобразовать этот итеративный экземпляр в Поток:
StreamSupport.stream(iterable.spliterator(), false);
Обратите внимание, что второй параметр в Stream Support.stream() определяет, должен ли результирующий поток быть параллельным или последовательным. Вы должны установить значение true для параллельного потока .
Теперь давайте проверим нашу реализацию:
@Test public void givenIterable_whenConvertedToStream_thenNotNull() { Iterableiterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false)); }
Кроме того, быстрое примечание-потоки не могут быть повторно использованы, в то время как Iterable is; он также предоставляет метод spliterator () , который возвращает java.lang.Экземпляр Spliterator над элементами, описанными данным Итерируемый .
3. Выполнение Потоковой операции
Давайте выполним простую потоковую операцию:
@Test public void whenConvertedToList_thenCorrect() { Iterableiterable = 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 .