N- Node parameter type
@Beta @DoNotMock(value="Implement with a lambda, or use GraphBuilder to build a Graph with the desired edges") public interface SuccessorsFunction<N>
This interface is meant to be used as the type of a parameter to graph algorithms (such as breadth first traversal) that only need a way of accessing the successors of a node in a graph.
you will invoke it depending on the graph representation you're using.
public <N> someGraphAlgorithm(N startNode, SuccessorsFunction<N> successorsFunction);
This works because those types each implement
SuccessorsFunction. It will also work with any other implementation of this interface.
If you have your own graph implementation based around a custom node type
which has a method
getChildren() that retrieves its successors in a graph:
If you have some other mechanism for returning the successors of a node, or one that doesn't
Iterable<? extends N>, then you can use a lambda to perform a more general
someGraphAlgorithm(startNode, node -> ImmutableList.of(node.leftChild(), node.rightChild()));
Graph algorithms that need additional capabilities (accessing both predecessors and
successors, iterating over the edges, etc.) should declare their input to be of a type that
provides those capabilities, such as
Iterable<? extends N> successors(N node)
nodewhich can be reached by traversing
node's outgoing edges in the direction (if any) of the edge.
This is not the same as "all nodes reachable from
node by following outgoing
edges". For that functionality, see
Some algorithms that operate on a
SuccessorsFunction may produce undesired results
if the returned
Iterable contains duplicate elements. Implementations of such
algorithms should document their behavior in the presence of duplicates.
The elements of the returned
Iterable must each be:
Mapkeys (see the Guava User Guide's section on graph elements for details)
nodeis not an element of this graph
Copyright © 2010–2020. All rights reserved.