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