Example usage for com.google.common.collect BinaryTreeTraverser BinaryTreeTraverser

List of usage examples for com.google.common.collect BinaryTreeTraverser BinaryTreeTraverser

Introduction

In this page you can find the example usage for com.google.common.collect BinaryTreeTraverser BinaryTreeTraverser.

Prototype

BinaryTreeTraverser

Source Link

Usage

From source file:org.asoem.greyfish.core.space.WalledPointSpace.java

@Override
@Nullable/*from www. j a  va2  s .  co  m*/
public Point2D getProjection(final O object) {

    final BinaryTreeTraverser<TwoDimTree.Node<O>> traverser = new BinaryTreeTraverser<TwoDimTree.Node<O>>() {
        @Override
        public Optional<TwoDimTree.Node<O>> leftChild(final TwoDimTree.Node<O> root) {
            return root.leftChild();
        }

        @Override
        public Optional<TwoDimTree.Node<O>> rightChild(final TwoDimTree.Node<O> root) {
            return root.rightChild();
        }
    };

    final TwoDimTree.Node<O> root = tree.get().rootNode().orNull();

    if (root != null) {
        final Optional<TwoDimTree.Node<O>> node = traverser.postOrderTraversal(root)
                .firstMatch(new Predicate<TwoDimTree.Node<O>>() {
                    @Override
                    public boolean apply(final TwoDimTree.Node<O> input) {
                        return object.equals(input.value());
                    }
                });
        return node.isPresent() ? ImmutablePoint2D.at(node.get().xCoordinate(), node.get().yCoordinate())
                : null;
    } else {
        return null;
    }
}