Можно ли использовать Java 8 Streams API для асинхронной обработки?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
26
задан Stuart Marks 17 February 2015 в 17:15
поделиться

1 ответ

Циклоп-реакция (я являюсь автором этой библиотеки), предоставляет класс StreamUtils для обработки потоков. Одной из функций, которые он предоставляет, является futureOperations, который обеспечивает доступ к стандартным операциям терминала Stream (а затем и к некоторым) с поворотом - поток выполняется асинхронно, а результат возвращается внутри CompletableFuture. .eg

 Stream<Integer> stream = Stream.of(1,2,3,4,5,6)
                                       .map(i->i+2);
 CompletableFuture<List<Integer>> asyncResult =  StreamUtils.futureOperations(stream,
                                             Executors.newFixedThreadPool(1))
                                       .collect(Collectors.toList());

Существует также удобный класс ReactiveSeq, который упаковывает Stream и обеспечивает те же функциональные возможности, с приятным беглым API

 CompletableFuture<List<Integer>> asyncResult = ReactiveSeq.of(1,2,3,4,5,6)
                                       .map(i->i+2)
                                       .futureOperations(
                                             Executors.newFixedThreadPool(1))
                                       .collect(Collectors.toList());

Как указал Адам циклопов -react FutureStreams предназначены для асинхронной обработки данных (путем смешивания Futures и Streams) - он особенно подходит для многопоточных операций, которые включают блокировку ввода-вывода (например, чтение файлов, выполнение вызовов db, выполнение вызовов rest и т. д. ).

3
ответ дан John McClean 17 February 2015 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: