I saw a SO question yesterday about implementing a classic linked list in Java. It was clearly an assignment from an undergraduate data structures class. It\'s easy to find qu
Exposing a stream view of arbitrary data structures is pretty easy. The key interface you have to implement is Spliterator
, which, as the name suggests, combines two things -- sequential element access (iteration) and decomposition (splitting).
Once you have a Spliterator
, you can turn that into a stream easily with StreamSupport.stream()
. In fact, here's the stream()
method from AbstractCollection
(which most collections just inherit):
default Stream stream() {
return StreamSupport.stream(spliterator(), false);
}
All the real work is in the spliterator()
method -- and there's a broad range of spliterator quality (the absolute minimum you need to implement is tryAdvance
, but if that's all you implement, it will work sequentially, but will lose out on most of the stream optimizations.) Look in the JDK sources Arrays.stream()
, IntStream.range()
) for examples of how to do better.)