summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-04-17 20:51:38 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-04-17 20:51:38 -0400
commitbada13a2ccedd860dfd7a45683e8e8f4ba8a038d (patch)
tree23d978588cb10ba28e42bd4a23834ec41c501452 /BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
parent77fcc58d1facffbc3af50be8c05985350e9f1355 (diff)
Added new tree traversal option, and some minor changes
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
index 5ee4200..03a1f93 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
@@ -262,4 +262,35 @@ public class Tree<ContainedType> implements ITree<ContainedType> {
});
}
}
+
+ @Override
+ public ITree<ContainedType> topDownTransform(
+ Function<ContainedType, TopDownTransformResult> transformPicker,
+ UnaryOperator<ITree<ContainedType>> transformer) {
+ TopDownTransformResult transformResult =
+ transformPicker.apply(data);
+
+ switch (transformResult) {
+ case PASSTHROUGH:
+ ITree<ContainedType> result = new Tree<>(data);
+
+ if (hasChildren) {
+ children.forEach((child) -> {
+ result.addChild(child.topDownTransform(
+ transformPicker, transformer));
+ });
+ }
+
+ return result;
+ case SKIP:
+ return this;
+ case TRANSFORM:
+ return transformer.apply(this);
+ default:
+ throw new IllegalArgumentException(
+ "Recieved unknown transform result "
+ + transformResult);
+
+ }
+ }
}