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格式的数据转化为实体类的方法

posted @ 2024-05-06 23:28  258333  阅读(8)  评论(0编辑  收藏  举报