【问题标题】:How to sort a hashmap whose keys are models?如何对键为模型的哈希图进行排序?
【发布时间】:2017-08-21 08:55:20
【问题描述】:

例如,我有 Hashmap

Map<EmailCategoryModel, List<EmailBlogDetailsModel>> map;

如何根据键的某些属性对 Map 进行排序?

【问题讨论】:

  • 你想要排序..什么?地图?排序List&lt;EmailBlogDetailsModel&gt;?
  • @DavidPérezCabrera,我要对地图进行排序
  • 唯一可以排序的地图是 LinkedHashMap,根据定义,地图没有顺序。
  • 我会使用java.util.TreeMap。由于您的模型没有实现Comparable,您需要设置Comparator
  • (source: link) "一般最好避免对 Mapping 结构进行排序。原因是 map 应该是一个查找表。当找到一个值时,它需要 O(1 ) 是时候查找它了。没有必要对其进行排序。如果可能的话,我会考虑使用不同的数据结构。"

标签: java sorting collections hashmap


【解决方案1】:

使用 TreeMap 这是一个排序的地图,然后使用比较器或可比较的接口。 代码:

// Use TreeMap like this

TreeMap<EmailCategoryModel, EmailBlogDetailsModel> map = new TreeMap<>(new ComparatorNew());

// And create comparator somewhat like this
class ComparatorNew implements Comparator<EmailCategoryModel> {

    @Override
    public int compare(EmailCategoryModel o1, EmailCategoryModel o2) {
        // Do sorting based on your model attribute here.
        return 0;
    }

}

【讨论】:

  • 为什么ComparatorNew 应该扩展TreeMap
  • 通过编写class ComparatorNew&lt;EmailCategoryModel,EmailBlogDetailsModel&gt;,您声明两个泛型类型,名为EmailCategoryModelEmailBlogDetailsModel。因此,您的代码可以有效地重写为class ComparatorNew&lt;T,U&gt; implements Comparator&lt;T&gt;,这看起来不正确,因为它不能处理已经存在的EmailCategoryModel 类型。你很可能想要class ComparatorNewimplements Comparator&lt;EmailCategoryModel&gt;
  • 同意,谢谢@Pshemo
  • 似乎除了泛型类型声明之外,我还删除了我之前评论中最后一个代码示例中的 implements 关键字。只需在Comparator前添加即可
  • 我没有从示例中删除它
猜你喜欢
  • 1970-01-01
  • 2011-08-12
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多