Wie konvertiere ich eine Baumstruktur in einen Stream von Knoten in Java

Ich möchte einen Baum in einen Java8-Datenstrom von Knoten konvertieren

Hier ist ein Baum von Knoten, die Daten speichern, die ausgewählt werden können

public class SelectTree<D> {

  private D data;

  private boolean selected = false;

  private SelectTree<D> parent;

  private final List<SelectTree<D>> children = new ArrayList<>();

  public SelectTree(D data, SelectTree<D> parent) {
    this.data = data;
    if (parent != null) {
      this.parent = parent;
      this.parent.getChildren().add(this);
    }
  }

  public D getData() {
    return data;
  }

  public void setData(D data) {
    this.data = data;
  }

  public boolean isSelected() {
    return selected;
  }

  public void setSelected(boolean selected) {
    this.selected = selected;
  }

  public SelectTree<D> getParent() {
    return parent;
  }

  public void setParent(SelectTree<D> parent) {
    this.parent = parent;
  }

  public List<SelectTree<D>> getChildren() {
    return children;
  }

  public boolean isRoot() {
    return this.getParent() == null;
  }

  public boolean isLeaf() {
    return this.getChildren() == null || this.getChildren().isEmpty();
  }
}

Ich möchte eine Sammlung der ausgewählten Daten erhalten

Ich möchte so etwas machen:

  public static void main(String[] args) {
    SelectTree<Integer> root = generateTree();

    List<Integer> selectedData = root.stream()
            .peek(node -> System.out.println(node.getData()+": "+node.isSelected()))
            .filter(node-> node.isSelected())
            .map(node-> node.getData())
            .collect(Collectors.toList()) ;

    System.out.println("\nselectedData="+selectedData);
  }

  private static SelectTree<Integer> generateTree() {
    SelectTree<Integer> n1 = new SelectTree(1, null);
    SelectTree<Integer> n11 = new SelectTree(11, n1);
    SelectTree<Integer> n12 = new SelectTree(12, n1);
    n12.setSelected(true);
    SelectTree<Integer> n111 = new SelectTree(111, n11);
    n111.setSelected(true);
    SelectTree<Integer> n112 = new SelectTree(112, n11);
    SelectTree<Integer> n121 = new SelectTree(121, n12);
    SelectTree<Integer> n122 = new SelectTree(122, n12);
    return n1;
  }

Das Problem war, die Implementierung von @ zu findstream() und ich denke, ich könnte einigen Leuten helfen, meine Lösung mitzuteilen, und ich würde gerne wissen, ob es einige Probleme oder bessere Möglichkeiten gibt, dies zu tun.

unächst war es für PrimefacesTreeNode aber ich verallgemeinere das Problem auf alle Arten von Bäumen