Stream based API for tree like structures
Remi Forax
forax at univ-mlv.fr
Fri Jan 20 15:00:06 UTC 2017
https://gist.github.com/forax/bca6877e019d134f87c4cb1e8efae9cd
Rémi
----- Mail original -----
> De: "Kasper Nielsen" <kasperni at gmail.com>
> À: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Envoyé: Vendredi 20 Janvier 2017 11:03:41
> Objet: Stream based API for tree like structures
> Hi,
>
> Sorry if this is a bit off-topic, but I thought but I thought it might have
> some general interest if Java ever got some proper tree/graph collection
> classes.
>
> Has anyone developed a stream based API that allows for tree based travels.
> I'm mainly thinking about functionality for
>
> 1)
> Whether or not to do recursive traversal of all child nodes, only 1 level
> of child nodes, or just siblings
>
> 2)
> Order of traversal: depth/breadth first.
>
> I'm trying to avoid an explosion of methods such as
> streamSieblingsDepthOrderFirst.
> One thought I had was taking a var arg of options to stream and
> parallelStream such as:
> enum TreeStreamOptions {
> SIEBLINGS_ONLY, RECURSIVELY, DEPTH_FIRST, BREATH_FIRST;
> }
> Stream<T> stream(TreeStreamOptions... options)
> Stream<T> parallelStream(TreeStreamOptions... options)
>
> another one could be
>
> class TreeStreamOptions {
> TreeStreamOptions setDepthFirst();
> TreeStreamOptions setBreathFirst();
> TreeStreamOptions setDepth(); (0 sieblings only, Integer.MAX->infinity)
> }
> Stream<T> stream(TreeStreamOptions options)
> Stream<T> parallelStream(TreeStreamOptions options)
>
> While a visitor pattern would make sense for many use cases. I really like
> the simplicity of just working with streams.
>
> Maybe someone has some thoughts on this.
>
> Best
> Kasper
More information about the core-libs-dev
mailing list