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 | |版本>获取版本(最新版本)){
最新版本=束;
}
}
返回最新版本;
}
注意:这段代码中没有异常处理,我建议添加一些。除此之外,我还测试了它,以验证它是否有效