Interface PredecessorsFunction<N>
-
- Type Parameters:
N- Node parameter type
- All Known Subinterfaces:
com.google.common.graph.BaseGraph<N>,Graph<N>,MutableGraph<N>,MutableNetwork<N,E>,MutableValueGraph<N,V>,Network<N,E>,ValueGraph<N,V>
- All Known Implementing Classes:
AbstractGraph,AbstractNetwork,AbstractValueGraph,ImmutableGraph,ImmutableNetwork,ImmutableValueGraph
@Beta @DoNotMock("Implement with a lambda, or use GraphBuilder to build a Graph with the desired edges") public interface PredecessorsFunction<N>
A functional interface for graph-structured data.This interface is meant to be used as the type of a parameter to graph algorithms (such as topological sort) that only need a way of accessing the predecessors of a node in a graph.
Usage
Given an algorithm, for example:
you will invoke it depending on the graph representation you're using.public <N> someGraphAlgorithm(N startNode, PredecessorsFunction<N> predecessorsFunction);If you have an instance of one of the primary
common.graphtypes (Graph,ValueGraph, andNetwork):
This works because those types each implementsomeGraphAlgorithm(startNode, graph);PredecessorsFunction. It will also work with any other implementation of this interface.If you have your own graph implementation based around a custom node type
MyNode, which has a methodgetParents()that retrieves its predecessors in a graph:someGraphAlgorithm(startNode, MyNode::getParents);If you have some other mechanism for returning the predecessors of a node, or one that doesn't return a
Iterable<? extends N>, then you can use a lambda to perform a more general transformation:someGraphAlgorithm(startNode, node -> ImmutableList.of(node.mother(), node.father()));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
Graph,ValueGraph, orNetwork.Additional documentation
See the Guava User Guide for the
common.graphpackage ("Graphs Explained") for additional documentation, including notes for implementors- Since:
- 23.0
- Author:
- Joshua O'Madadhain, Jens Nyman
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description java.lang.Iterable<? extends N>predecessors(N node)Returns all nodes in this graph adjacent tonodewhich can be reached by traversingnode's incoming edges against the direction (if any) of the edge.
-
-
-
Method Detail
-
predecessors
java.lang.Iterable<? extends N> predecessors(N node)
Returns all nodes in this graph adjacent tonodewhich can be reached by traversingnode's incoming edges against the direction (if any) of the edge.Some algorithms that operate on a
PredecessorsFunctionmay produce undesired results if the returnedIterablecontains duplicate elements. Implementations of such algorithms should document their behavior in the presence of duplicates.The elements of the returned
Iterablemust each be:- Non-null
- Usable as
Mapkeys (see the Guava User Guide's section on graph elements for details)
- Throws:
java.lang.IllegalArgumentException- ifnodeis not an element of this graph
-
-