My old code: public void flattenInto(T element, Consumer<R> sink) { R r = .. if (...) { sink.accept(r); } Is replaced with: Stream<? extends R> apply(T element) { R r = ... return ? (...) : Collections.singleton(t).stream() : null; } I wonder if I can do better. Thanks Boaz