common/src/main/java/org/jboss/pnc/common/graph/GraphUtils.java
public static <T> void merge(Graph<T> target, Graph<T> toMerge) {
        for (Vertex<T> vertex : toMerge.getVerticies()) {
            target.addVertex(vertex);
        }

        // merge edges
        List<Edge<T>> edges = target.getEdges();
        for (Edge newEdge : toMerge.getEdges()) {
            Optional<Edge<T>> any = edges.stream()
                    .filter(existing ->
                            existing.getFrom().getName().equals(newEdge.getFrom().getName())
                             && existing.getTo().getName().equals(newEdge.getTo().getName())
                    ).findAny();
            if (!any.isPresent()) {
                edges.add(newEdge);
            }
        }
    }
public static <T> void merge(Graph<T> target, Graph<T> toMerge) {
        for (Vertex<T> vertex : toMerge.getVerticies()) {
            target.addVertex(vertex);
        }

        // merge edges
        List<Edge<T>> edges = target.getEdges();
        for (Edge newEdge : toMerge.getEdges()) {
            Optional<Edge<T>> any = edges.stream()
                    .filter(existing ->
                            existing.getFrom().getName().equals(newEdge.getFrom().getName())
                             && existing.getTo().getName().equals(newEdge.getTo().getName())
                    ).findAny();
            if (!any.isPresent()) {
                edges.add(newEdge);
            }
        }
    }
Adds all elements from toMerge to target.