5.6
public String loadMetroSystem(MetroSystem metroSystem) {
if (!allMetroStationHashMaps.containsKey(metroSystem.getSystemId())) {
//创建一个新的无向图metroStationGraph,用于表示地铁站点之间的连接关系 DefaultEdge.class表示边的类型 默认边
Graph<String, DefaultEdge> metroStationGraph = new DefaultUndirectedGraph<>(DefaultEdge.class);
//创建了一个 DijkstraShortestPath(迪杰斯特拉最短路径)算法实例,用于在给定的地铁站点图 metroStationGraph 上计算最短路径。
DijkstraShortestPath<String, DefaultEdge> dijkstraAlgMetroSearch = new DijkstraShortestPath<>(metroStationGraph);
//地铁站点
HashMap<String, MetroStation> metroStationHashMap = new HashMap<>();
//地铁线路
HashMap<String, MetroLine> metroLineHashMap = new HashMap<>();
//添加地铁站点到无向图metroStationGraph
for (MetroLine metroLine : metroSystem.getLines()) {
// 将线路id作为键 线路作为值存到metroLineHashMap中
metroLineHashMap.put(metroLine.getLineId(), metroLine);
//存储前一个站点的信息
MetroStation previousMetroStation = null;
//遍历线路上的 站点信息
for (MetroStation currentMetroStation : metroLine.getStations()) {
//将当前遍历到的地铁站点的ID添加到地铁站点图 metroStationGraph 中作为一个顶点。
metroStationGraph.addVertex(currentMetroStation.getStationId());
//如果前一个地铁站点不为null(也就是不是该线路上的第一个站点),则在地铁站点图 metroStationGraph 中添加一条边,连接前一个地铁站点和当前遍历到的地铁站点。
if (previousMetroStation != null) {
metroStationGraph.addEdge(previousMetroStation.getStationId(), currentMetroStation.getStationId());
}
// 更新 previousMetroStation 的值为当前遍历到的地铁站点,以便在下一次循环中使用。
previousMetroStation = currentMetroStation;
}
}
//循环遍历地铁系统中的每一条地铁线路。
for (MetroLine metroLine : metroSystem.getLines()) {
//循环遍历每条地铁线路上的各个站点。
for (MetroStation currentMetroStation : metroLine.getStations()) {
//检查metroStationHashMap是否已经包含当前地铁站点的信息
if (!metroStationHashMap.containsKey(currentMetroStation.getStationId())) {
/*
通过currentMetroStation.getLineIds().stream()获取当前地铁站点所属的地铁线路ID流。
从这些ID中筛选出在metroLineHashMap中存在的地铁线路ID,并将其映射为对应的地铁线路对象。
将得到的地铁线路对象列表设置为当前地铁站点的所属线路信息。
*/
currentMetroStation.setLines(currentMetroStation.getLineIds().stream()
.filter(lineId -> metroLineHashMap.get(lineId) != null)
.map(metroLineHashMap::get)
.collect(Collectors.toList()));
//将当前地铁站点的ID和信息添加到metroStationHashMap中,以便在之后的处理中可以根据ID快速检索到对应的地铁站点对象
metroStationHashMap.put(currentMetroStation.getStationId(), currentMetroStation);
}
}
}
//将加载好的整个地铁站点图(metroStationGraph)与其所属的系统ID关联起来,并存储到allMetroStationGraphs中。
//这样就可以使用系统ID来快速检索到对应的地铁站点图。
allMetroStationGraphs.put(metroSystem.getSystemId(), metroStationGraph);
//将使用Dijkstra算法初始化的最短路径搜索实例(dijkstraAlgMetroSearch)与其所属的系统ID关联起来,
//并存储到allDijkstraAlgMetroSearch中。这样就可以使用系统ID来快速检索到对应的最短路径搜索算法实例。
allDijkstraAlgMetroSearch.put(metroSystem.getSystemId(), dijkstraAlgMetroSearch);
//将加载的地铁线路信息(metroLineHashMap)与其所属的系统ID关联起来,并存储到allMetroLineHashMaps中。
//这样就可以使用系统ID来快速检索到对应的地铁线路信息。
allMetroLineHashMaps.put(metroSystem.getSystemId(), metroLineHashMap);
//将加载的地铁站点信息(metroStationHashMap)与其所属的系统ID关联起来,并存储到allMetroStationHashMaps中。
//这样就可以使用系统ID来快速检索到对应的地铁站点信息。
allMetroStationHashMaps.put(metroSystem.getSystemId(), metroStationHashMap);
return "Success";
}
return "Already Exists";
}
使用mybatis查询数据库中二进制json格式的数据 查询结果为空
目前 认为错误原因是 没有将json格式的数据转化为实体类的方法