Рубрики
Без рубрики

Итерируемый поток в Java

В статье объясняется, как преобразовать итерацию в поток и почему интерфейс итерации не поддерживает ее напрямую.

Автор оригинала: baeldung.

1. Обзор

В этом коротком уроке давайте преобразуем объект Java Iterable в Stream и выполним над ним некоторые стандартные операции.

2. Преобразование итерируемого в поток

Интерфейс Iterable разработан с учетом общности и не предоставляет никакого метода stream() самостоятельно.

Проще говоря, вы можете передать его в метод StreamSupport.stream() и получить Stream из данного Итерируемый экземпляр.

Давайте рассмотрим наш Итерируемый экземпляр:

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

И вот как мы можем преобразовать этот итеративный экземпляр в Поток:

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

Обратите внимание, что второй параметр в Stream Support.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 is; он также предоставляет метод spliterator () , который возвращает java.lang.Экземпляр Spliterator над элементами, описанными данным Итерируемый .

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 .