首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中HashMap的排序

Java中HashMap的排序
EN

Stack Overflow用户
提问于 2016-10-13 13:07:53
回答 3查看 83关注 0票数 1

我有一个地图,里面有键和值

键:-案例1,案例2......case 10

值:- Jan,Feb......Oct

现在,当我把这张地图放在数组列表中时(这样我就可以对它进行排序)

代码语言:javascript
运行
复制
for (String key : dataValueMap.keySet()) {
    System.out.println(key + " " + dataValueMap.get(key));
}
ArrayList<String> keys = new ArrayList<String>(
dataValueMap.keySet());
Collections.sort(keys);
for (String counter : keys) {
   System.out.println(counter); >>>>>BUT it prints like :- case 1  then  case 10  then  case 2, case 3, case 4 etc.
}

请帮忙解决这个问题,

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-13 13:14:57

使用自定义Comparator实现对集合进行排序。它接受并比较键的整数,但依赖于大小写n的格式。

示例

代码语言:javascript
运行
复制
List<String> keys = new ArrayList<>();
keys.add("case 10");        
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");        
Collections.sort(keys, new Comparator<String>() {

    @Override
    public int compare(String s1, String s2) {
        s1 = s1.split(" ")[1];
        s2 = s2.split(" ")[1];
        return Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2));
    }
});

for (String key : keys) {
    System.out.println(key);
}
票数 3
EN

Stack Overflow用户

发布于 2016-10-13 13:17:50

如果您确定键格式,则可以按空间将其拆分,并将实际值与比较器进行比较,例如:

代码语言:javascript
运行
复制
Map<String, Object> myMap = 
        new TreeMap<String, Object>(new Comparator<String>()
        {
            public int compare(String o1, String o2)
            {
                Integer value1 = Integer.parseInt(o1.split("\\s+")[1]);
                Integer value2 = Integer.parseInt(o2.split("\\s+")[1]);
                return value1.compareTo(value2);
            } 
});

虽然如果键格式不正确,它会中断,但我们可以根据预期的行为添加对该格式的处理。

票数 1
EN

Stack Overflow用户

发布于 2016-10-13 13:46:19

那么,您只需为您的字符串版本定义一个新的自定义Comparator,并且可以编写将从列表中比较两个字符串的任何逻辑。

代码语言:javascript
运行
复制
List<String> keys = new ArrayList<>();

keys.add("case 10");    
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");

Comparator<String> comparator = new Comparator<String>(){
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(Integer.parseInt(s1.substring(5)), Integer.parseInt(s2.substring(5)));
    }  
};

Collections.sort(keys, comparator);
for (String counter : keys) {
    System.out.println(counter);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40021925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档