【问题标题】:Sorting hashmap by arraylist<Integer> values [duplicate]按arraylist <Integer>值排序哈希图[重复]
【发布时间】:2021-10-28 13:25:34
【问题描述】:

我试图按我作为值的数组列表的长度对哈希图进行排序。我的哈希图是:

HashMap<Integer, ArrayList<Integer>> NameofMap = new HashMap<Integer, ArrayList<Integer>>();

我一直在尝试使用内联比较器和 collections.sort,但它似乎对我的对象类型不满意,我不知道如何解决它。任何帮助将不胜感激,到目前为止我的代码如下:

Collections.sort(NameofMap.values(), new java.util.Comparator<ArrayList<Integer>>() {
            @Override
            public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
                return o1.size().compareTo(o2.size());
            }
        });

【问题讨论】:

  • 你有什么错误? GroupIntsNameOfMap 是什么?
  • “我正在尝试对 hashmap 进行排序..”让我们停在这里。 HashMap 中元素的顺序取决于键的数量及其哈希码,而不是值的任何属性。您可能想要创建单独的集合,该集合可以像LinkedHashMap 一样进行排序,从而保留插入顺序。更多信息Sort a Map<Key, Value> by values

标签: java sorting arraylist hashmap


【解决方案1】:

您需要编辑您的代码,在您的代码中NameofMap.values() 将返回一个不适用于可比较实体的集合,因此您需要做的是将hashmap 的值分配给ArrayList那么你可以比较ArrayLists of ArrayList

List<ArrayList<Integer>> l = new ArrayList<>(NameofMap.values());
Collections.sort(l, new Comparator<ArrayList<Integer>>(){
    @Override
    public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2){
        return Integer.compare(o2.size(), o1.size());
    }
});

【讨论】:

  • 我注意到在其中一个 cmets 中我实际上无法直接对 hashmap 进行排序,是否可以通过某种方式更改此代码以将其转换为允许排序的形式?
猜你喜欢
  • 2016-11-21
  • 2010-10-20
  • 2018-07-21
  • 2014-01-30
  • 2017-07-16
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多