nimo23:
この(バージョン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());
}
EDIT:
唯一のバージョン2は、バージョン1が正しくない、正しいです。
関連質問:
バージョン2の溶液を使用せずにitermediate操作バイパスする方法はありますか?例えば、
stream.filter(pred == null ? Void : predicate)
.order(comparator == null ? Void : comparator);
ジェイソン:
彼らは同じではありませんありません。あなたは、フィルタは、それが新しいStreamオブジェクトを作成し、基になるストリームを変異させていないため、ストリームに再割り当てを行う必要があります。しかし非常に良い質問。