Iterable#spliterator

Boaz Nahum boaznahum at gmail.com
Fri Mar 29 07:18:29 PDT 2013


Hi all

There is no spliterator in Iterable. Only in Collection.

So I'm forced:

    public interface Tree<T> {

Iterable<T> getLeaves();

default Stream<T> leavesAsStream() {

if (leaves instanceof Collection) {
            return ((Collection<T>) leaves).stream();
} else {
            return
Streams.stream(Spliterators.spliteratorUnknownSize(getLeaves().iterator(),
0));
}
    }

And Why do I care ? Because in most cases Collection#stream is much
efficient than Spliterators#spliteratorUnknownSize

One may say, override leavesAsStream() when ever you override getLeaves().
But in many cases I have no such option.

Thanks
Boaz


More information about the lambda-dev mailing list