/** Creates a new TreeDef which whose {@code childrenOf} method is filtered by the given predicate. */ default TreeDef<T> filter(Predicate<T> predicate) { return TreeDef.of(node -> TreeImp.filteredList(childrenOf(node), predicate)); }
/** Creates a new {@code TreeDef.Parented} whose {@code childrenOf} and {@code parentOf} methods are filtered by {@code predicate}. */ @Override default Parented<T> filter(Predicate<T> predicate) { return of(node -> TreeImp.filteredList(childrenOf(node), predicate), node -> { if (predicate.test(node)) { return parentOf(node); } else { return null; } }); }