首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按值对HashMap进行排序

按值对HashMap进行排序
EN

Stack Overflow用户
提问于 2011-11-14 17:14:39
回答 10查看 470.9K关注 0票数 153

我需要根据存储在其中的值对HashMap进行排序。HashMap包含存储在电话中的联系人姓名。

此外,我还需要键在我对值进行排序时立即自动排序,或者您可以说键和值绑定在一起,因此值的任何更改都应该反映在键中。

代码语言:javascript
复制
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"froyo");
map.put(2,"abby");
map.put(3,"denver");
map.put(4,"frost");
map.put(5,"daisy");

所需输出:

代码语言:javascript
复制
2,abby;
5,daisy;
3,denver;
4,frost;
1,froyo;
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-11-14 17:18:24

假设使用Java,您可以像这样对hashmap进行排序:

代码语言:javascript
复制
public LinkedHashMap<Integer, String> sortHashMapByValues(
        HashMap<Integer, String> passedMap) {
    List<Integer> mapKeys = new ArrayList<>(passedMap.keySet());
    List<String> mapValues = new ArrayList<>(passedMap.values());
    Collections.sort(mapValues);
    Collections.sort(mapKeys);

    LinkedHashMap<Integer, String> sortedMap =
        new LinkedHashMap<>();

    Iterator<String> valueIt = mapValues.iterator();
    while (valueIt.hasNext()) {
        String val = valueIt.next();
        Iterator<Integer> keyIt = mapKeys.iterator();

        while (keyIt.hasNext()) {
            Integer key = keyIt.next();
            String comp1 = passedMap.get(key);
            String comp2 = val;

            if (comp1.equals(comp2)) {
                keyIt.remove();
                sortedMap.put(key, val);
                break;
            }
        }
    }
    return sortedMap;
}

这只是一个启动示例。这种方法更有用,因为它对HashMap进行排序并保留重复的值。

票数 97
EN

Stack Overflow用户

发布于 2013-10-30 08:48:03

在Java 8中:

代码语言:javascript
复制
Map<Integer, String> sortedMap = 
     unsortedMap.entrySet().stream()
    .sorted(Entry.comparingByValue())
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue,
                              (e1, e2) -> e1, LinkedHashMap::new));
票数 95
EN

Stack Overflow用户

发布于 2015-11-06 03:01:05

代码语言:javascript
复制
map.entrySet().stream()
                .sorted((k1, k2) -> -k1.getValue().compareTo(k2.getValue()))
                .forEach(k -> System.out.println(k.getKey() + ": " + k.getValue()));
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8119366

复制
相关文章

相似问题

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