https://gist.github.com/forax/bca6877e019d134f87c4cb1e8efae9cd
Rémi ----- Mail original ----- > De: "Kasper Nielsen" <kaspe...@gmail.com> > À: "core-libs-dev" <core-libs-dev@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