@@ -0,0 +1,1520 @@
+/*%0A * Java Genetic Algorithm Library (@__identifier__@).%0A * Copyright (c) @__year__@ Franz Wilhelmst%C3%B6tter%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *      http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A *%0A * Author:%0A *    Franz Wilhelmst%C3%B6tter (franz.wilhelmstoetter@gmail.com)%0A */%0Apackage io.jenetics.ext.util;%0A%0Aimport java.util.List;%0Aimport java.util.Optional;%0A%0A/**%0A * @author %3Ca href=%22mailto:franz.wilhelmstoetter@gmail.com%22%3EFranz Wilhelmst%C3%B6tter%3C/a%3E%0A * @version !__version__!%0A * @since !__version__!%0A */%0Apublic class TreeRewriter %7B%0A%0A%09public static interface Rule%3CV%3E %7B%0A%0A%09%09public boolean matches(final TreeNode%3CV%3E tree);%0A%0A%09%09public void rewrite(final TreeNode%3CV%3E tree);%0A%0A%09%7D%0A%0A%09public static %3CV%3E%0A%09int rewrite(final TreeNode%3CV%3E node, final List%3CRule%3CV%3E%3E rules) %7B%0A%09%09if (node.isLeaf()) %7B%0A%09%09%09return 0;%0A%09%09%7D else %7B%0A%09%09%09final Optional%3CRule%3CV%3E%3E simplifier= rules.stream()%0A%09%09%09%09.filter(s -%3E s.matches(node))%0A%09%09%09%09.findFirst();%0A%0A%09%09%09simplifier.ifPresent(r -%3E r.rewrite(node));%0A%09%09%09return node.childStream()%0A%09%09%09%09.mapToInt(child -%3E rewrite(child, rules))%0A%09%09%09%09.sum();%0A%09%09%7D%0A%09%7D%0A%0A%7D%0A

Add 'TreeRewriter' class.