Java 如何根据值对地图进行排序

Java 如何根据值对地图进行排序,java,sorting,map,Java,Sorting,Map,我正在尝试在地图中存储捆绑包名称及其最新版本 下面是我的newDirs,这是一个ArrayList(),我应该从中获取捆绑包名称及其最新版本- [{objectName=/storage/Model/Framework/1.0.0/, objectId=4fa042a5a56c861104fa05c246cf850522a2354ca223, objectType=DIRECTORY}, {objectName=/storage/Model/Framework/1.0.1/, objectId

我正在尝试在地图中存储捆绑包名称及其最新版本

下面是我的
newDirs
,这是一个
ArrayList()
,我应该从中获取捆绑包名称及其最新版本-

[{objectName=/storage/Model/Framework/1.0.0/, objectId=4fa042a5a56c861104fa05c246cf850522a2354ca223, objectType=DIRECTORY}, 
{objectName=/storage/Model/Framework/1.0.1/, objectId=4fa042a5a66c860d04fa056bbe1cf50522a14094ca3f, objectType=DIRECTORY}]
现在,我要从上面的列表中提取最新版本的
框架包
。因此,在上述情况下,它是
1.0.1版本
,捆绑包名称是
Framework
。因此,在上述情况下,我的map将
Framework
存储为键,
1.0.1
存储为包的版本

下面是我的代码-

final List<Map<String, String>> newDirs = new ArrayList<Map<String, String>>();

for(String ss : list) {

    //some code here for newDirs

    Map<String, String> map = storageDirectorySort(newDirs);
    System.out.println(map);
}

/**
 * Sort the list and then return the map as the Bundle Name and its Latest version
 *
 */
private static Map<String, String> storageDirectorySort(List<Map<String, String>> newDirs) {

    Map<String, String> map = new LinkedHashMap<String, String>();

    // do the sorting here and always give back the latest version of the bundle and its name

    return map;
}
final List newDirs=new ArrayList();
for(字符串ss:list){
//这里有一些newDirs的代码
Map Map=storageDirectorySort(newDirs);
系统输出打印项次(map);
}
/**
*对列表进行排序,然后将映射作为捆绑包名称及其最新版本返回
*
*/
专用静态映射storageDirectorySort(列出新目录){
Map Map=newlinkedhashmap();
//在此处进行排序,并始终返回捆绑包的最新版本及其名称
返回图;
}
有人能帮我吗。我不确定这样做的最佳方式是什么?

您需要另一个助手方法来帮助解析版本号。然后在storageDirectorySort方法中调用它:

    private static int getVersion(Map<String, String> dir) {
        String objectName = dir.get("objectName");
    // Get the various parts of the name
        String[] nameParts = objectName.split("/");
    // Get the version from the nameParts
        String[] versionString = nameParts[nameParts.length - 1].split("\\.");
        // Parse version String into an int
        return (Integer.valueOf(versionString[0]) * 1000000)
                + (Integer.valueOf(versionString[1]) * 10000)
                + (Integer.valueOf(versionString[2]) * 100);
    }

    private static Map<String, String> storageDirectorySort(
            List<Map<String, String>> newDirs) {

        Map<String, String> latestVersion = null;
        for (Map<String, String> bundle : newDirs) {
            int version = getVersion(bundle);
            if (latestVersion == null || version > getVersion(latestVersion)) {
                latestVersion = bundle;
            }
        }

        return latestVersion;
    }
private static int getVersion(映射目录){
字符串objectName=dir.get(“objectName”);
//获取名称的各个部分
字符串[]nameParts=objectName.split(“/”);
//从nameParts获取版本
字符串[]versionString=nameParts[nameParts.length-1]。拆分(“\\”;
//将版本字符串解析为int
返回值(整数.valueOf(versionString[0])*1000000)
+(Integer.valueOf(versionString[1])*10000)
+(整数值of(versionString[2])*100);
}
私有静态映射storageDirectorySort(
列表(新目录){
Map latestVersion=null;
用于(地图束:newDirs){
int version=getVersion(bundle);
如果(最新版本==null | |版本>获取版本(最新版本)){
最新版本=束;
}
}
返回最新版本;
}
注意:这段代码中没有异常处理,我建议添加一些。除此之外,我还测试了它,以验证它是否有效