Java 如何在jgrapht DirectedArcyclicGraph中查找根和叶集

Java 如何在jgrapht DirectedArcyclicGraph中查找根和叶集,java,graph,jgrapht,Java,Graph,Jgrapht,我的代码: import org.jgrapht.graph.DirectedAcyclicGraph; // ... private DirectedAcyclicGraph<String, DefaultEdge> graph = new DirectedAcyclicGraph<>(DefaultEdge.class); // ... graph.addVertex("x"); graph.addVertex("y"); // ... graph.addEdge("

我的代码:

import org.jgrapht.graph.DirectedAcyclicGraph;
// ...
private DirectedAcyclicGraph<String, DefaultEdge> graph = new DirectedAcyclicGraph<>(DefaultEdge.class);
// ...
graph.addVertex("x");
graph.addVertex("y");
// ...
graph.addEdge("x", "y");
import org.jgrapht.graph.directedaccyclicgraph;
// ...
private DirectedArcyclicGraph=新的DirectedArcyclicGraph(DefaultEdge.class);
// ...
图.addVertex(“x”);
图.addVertex(“y”);
// ...
图.附录(“x”、“y”);

构建图形后,如何获得一组所有根(没有传入边的顶点)和所有叶(没有传出边的顶点)

下面的操作正常,但我觉得不是最有效的

// leaves:
graph.keySet().stream()
                .filter(key -> graph.outgoingEdgesOf(key).size() == 0)
                .forEach(key -> doLeavesStuff(key));

// roots:
graph.keySet().stream()
                .filter(key -> graph.incomingEdgesOf(key).size() == 0)
                .forEach(key -> doRootsStuff(key));