fix concurrent modification bug

This commit is contained in:
eugenefischer
2025-04-10 13:33:47 -05:00
parent 57fe9c1619
commit c21e375303

View File

@@ -9,15 +9,17 @@ public interface GraphModificationFunctions {
static Map<DefaultWeightedEdge, Vertex[]> filterByOverlapThresholds(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
int low, int high, boolean saveEdges) {
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
for (DefaultWeightedEdge e : graph.edgeSet()) {
if ((graph.getEdgeWeight(e) > high) || (graph.getEdgeWeight(e) < low)) {
if(saveEdges) {
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
removedEdges.put(e, vertices);
}
graph.removeEdge(e);
edgesToRemove.add(e);
}
}
edgesToRemove.forEach(graph::removeEdge);
return removedEdges;
}
@@ -25,6 +27,7 @@ public interface GraphModificationFunctions {
static Map<DefaultWeightedEdge, Vertex[]> filterByRelativeOccupancy(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
Integer maxOccupancyDifference, boolean saveEdges) {
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
for (DefaultWeightedEdge e : graph.edgeSet()) {
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
@@ -33,9 +36,10 @@ public interface GraphModificationFunctions {
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
removedEdges.put(e, vertices);
}
graph.removeEdge(e);
edgesToRemove.add(e);
}
}
edgesToRemove.forEach(graph::removeEdge);
return removedEdges;
}
@@ -44,6 +48,7 @@ public interface GraphModificationFunctions {
Integer minOverlapPercent,
boolean saveEdges) {
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
for (DefaultWeightedEdge e : graph.edgeSet()) {
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
@@ -54,9 +59,10 @@ public interface GraphModificationFunctions {
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
removedEdges.put(e, vertices);
}
graph.removeEdge(e);
edgesToRemove.add(e);
}
}
edgesToRemove.forEach(graph::removeEdge);
return removedEdges;
}