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