diff --git a/src/edu/stanford/nlp/graph/DirectedMultiGraph.java b/src/edu/stanford/nlp/graph/DirectedMultiGraph.java index 68dd9255cc..26639d8f50 100644 --- a/src/edu/stanford/nlp/graph/DirectedMultiGraph.java +++ b/src/edu/stanford/nlp/graph/DirectedMultiGraph.java @@ -571,20 +571,22 @@ public E next() { } private void primeIterator() { - if (edgeIterator != null && edgeIterator.hasNext()) { - hasNext = true; // technically, we shouldn't need to put this here, but let's be safe - } else if (connectionIterator != null && connectionIterator.hasNext()) { - Map.Entry> nextConnection = connectionIterator.next(); - edgeIterator = nextConnection.getValue().iterator(); - currentTarget = nextConnection.getKey(); - primeIterator(); - } else if (vertexIterator != null && vertexIterator.hasNext()) { - Map.Entry>> nextVertex = vertexIterator.next(); - connectionIterator = nextVertex.getValue().entrySet().iterator(); - currentSource = nextVertex.getKey(); - primeIterator(); - } else { - hasNext = false; + while (true) { + if (edgeIterator != null && edgeIterator.hasNext()) { + hasNext = true; // technically, we shouldn't need to put this here, but let's be safe + return; + } else if (connectionIterator != null && connectionIterator.hasNext()) { + Map.Entry> nextConnection = connectionIterator.next(); + edgeIterator = nextConnection.getValue().iterator(); + currentTarget = nextConnection.getKey(); + } else if (vertexIterator != null && vertexIterator.hasNext()) { + Map.Entry>> nextVertex = vertexIterator.next(); + connectionIterator = nextVertex.getValue().entrySet().iterator(); + currentSource = nextVertex.getKey(); + } else { + hasNext = false; + return; + } } }