Возможность итерации для потоковой передачи в 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.