2016-04-09 2 views
5

Является ли вариант 1 или вариант 2 ниже правильного (например, одного предпочтительного над другим) или они эквивалентны?Java 8 Streams Filter Намерение ленивой оценки

Вариант 1

collectionOfThings. 
    stream(). 
    filter(thing -> thing.condition1() && thing.condition2()) 

или

Вариант 2

collectionOfThings 
    .stream() 
    .filter(thing -> thing.condition1()) 
    .filter(thing -> thing.condition2()) 
+0

Ответ на предыдущий вопрос неверен. Я не специалист по бенчмаркингу, но мои собственные тесты показывают, что Option1 может работать значительно лучше. Я отправлю свой тестовый код на другой вопрос, и я был бы признателен за чей-то обзор моих результатов. –

ответ

8

Для компиляции, второй должен быть

collectionOfThings. 
    stream(). 
    filter(thing -> thing.condition1()). 
    filter(thing -> thing.condition2()) 

Они оба эквивалентны. Иногда один из них более читабельен, чем другой.

Альтернативный способ написания второй будет использовать ссылку метод:

collectionOfThings 
    .stream() 
    .filter(Thing::condition1) 
    .filter(Thing::condition2) 

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

+0

Спасибо! Я скорректировал пример, чтобы исправить ошибки. –

Смежные вопросы