Преимущество ленивой оценки потоков в Java - PullRequest
0 голосов
/ 24 сентября 2018

Я читал, что потоки лениво оцениваются в конвейере.Он не выполняется, если в выражении не вызывается терминальная операция.Но каковы преимущества этой ленивой оценки выражений?Может кто-нибудь объяснить, пожалуйста, с некоторыми примерами

1 Ответ

0 голосов
/ 24 сентября 2018

Ленивая оценка потоковых конвейеров в Java не имеет ничего общего с лямбдами.

Все, кроме последних станций в потоковом конвейере , оцениваются только тогда, когда последниеСтанция просит больше данных.Когда последняя станция тянет одну секунду от последней, эта тянет от предыдущей и т. Д. До тех пор, пока, наконец, запрос новых данных не дойдет до поставщика.Затем поставщик предоставляет следующее значение, которое передается обратно (фактически вперед) по конвейеру до последней стадии (сборщик или forEach), и цикл повторяется.

Этот подход не требует реализации конвейера более чем-произвести и / или буферизовать что-либо.Это отлично подходит для использования процессора и памяти, что обычно является большим отклонением для приложений Java.

Пример:

Stream
    .generate(new Random(42)::nextLong) // <-- supplies the next random number every time the next station pulls it
    .limit(5) // <-- pulls from the generator when is pulled itself
              //     terminates the pipeline after 5 pulls
    .collect(toList()); // <-- pulls data from the pipeline into the list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...