Является ли это (версия 1):
public List<Task> getTasks(Set<Task> tasks, Predicate<? super Task> predicate) {
var stream = tasks.stream();
if (predicate != null) stream.filter(predicate);
// is the stream filtered if predicate != null ?
return stream.collect(Collectors.toList());
}
таким же, как это (версия 2):
public List<Task> getTasks(Set<Task> tasks, Predicate<? super Task> predicate) {
var stream = tasks.stream();
// do I must reassign the stream to have the filtering
if (predicate != null) stream = stream.filter(predicate);
return stream.collect(Collectors.toList());
}
РЕДАКТИРОВАТЬ:
Только версия 2 верна, версия 1 неверна.
Смежный вопрос:
Есть ли способ обойти промежуточную операцию, не используя решение версии 2? Например,
stream.filter(pred == null ? Void : predicate)
.order(comparator == null ? Void : comparator);