Итерируемый для потока в Java

Возможность итерации для потоковой передачи в Java

1. обзор

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

2. ПреобразованиеIterable вStream

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

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

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

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

А вот как мы можем преобразовать этот экземплярIterable вStream:

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

Обратите внимание, что второй параметр вStreamSupport.stream() определяет, должен ли результирующийStream быть параллельным или последовательным. Вы должны установить его истинным для параллельногоStream.

Теперь давайте протестируем нашу реализацию:

@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 instance по элементам, описанным даннымIterable.

3. Выполнение операцииStream

Давайте выполним простую потоковую операцию:

@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 project.