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