This is a request for an additional method on java.util.stream.Stream. Having written quite a bit of code in Java 8 now, one annoyance keeps on coming up, filtering and casting the stream.
Currently, it is necessary to do this: return input.stream() .filter(Foo.class::isInstance) .map(Foo.class::cast) .someTerminalOperation(); or return input.stream() .filter(t -> t instanceof Foo) .map(t -> (Foo) t) .someTerminalOperation(); Really, what is needed is this: return input.stream() .filter(Foo.class) .someTerminalOperation(); For info, Guava's FluentIterable has such a method. The new method signature would be something like: public Stream<R> filter(Class<R> cls); As far as I can see, there is no problem in implementing this in both serial and parallel modes, as it is essentially just a convenience. Thoughts? Stephen