java - 按键订购 HashMap?

标签 java spring hashmap entity

我有一个包含以下条目的 HashMap:

- 狗对象 - 狗的描述

Map<Dog, List<String>> DogsAndDescriptions;

我想按“老狗优先”的顺序订购 HashMap。

Dog 是一个 Entity,它具有以下我想按其排序的字段:

 @Column(name = "BIRTHDAY")
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    private DateTime birthday;

有可能吗?

最佳答案

这实际上是不可能的,因为 HashMap 是一个特殊的无序列表。

您可以使用使用插入顺序的 java.util.LinkedHashMap,但我认为您在这里真正想要的是 TreeMap这将支持其中元素的自然排序。

如果您添加一个比较器,它会吐出最老的狗,那么 TreeMap 会为您按该顺序对它们进行排序。

TreeMap 是 Map 的一个实现界面,以便您以与刚才相同的方式与其进行交互。

TreeMap<Dog, List<String>> dogsAndDescriptions = new TreeMap<Dog, List<String>>();

将实例化您的(不要将您的变量大写)dogsAndDescriptions 映射实例。作为 TreeMap 构造函数的一部分,您可以做的是传入 Comparator。这将控制你的狗如何作为键进行排序,或者使 Dog 类扩展 Comparable 并覆盖 compareTo 方法,基本上类似于

class Dog implements Comparable<Dog>{
    //somecode

    @Override
    public int compareTo(Dog o) {
        return birthday.compareTo(o.birthday);
    }
}

所以你可以看到,它会根据狗的生日来比较它们。我将链接到 example here我认为比较器的工作方式是一个不同的问题。但这是对它们进行排序的两种方法。

关于java - 按键订购 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546957/

相关文章:

java - Spring MVC 表单验证,带有 @NotEmpty 注解,一个 POJO 具有多个表单

java - 如何使用 Java 和 Spring 在 REST Web 服务中 wait()?

algorithm - 在一本大书中找到 10 个最常用的单词

java - java 8 中要映射的对象数组列表

struts2 - 从 Struts2 中的 hashmap 获取变量值

java - Hadoop Mapreduce字数统计程序

java - 数组列表中的比较器

java - 有条件地中断 java-gremlin 更新遍历,并显示错误消息

spring - 在 Spring 4.0 中使用 Jersey-spring

Java:如何测试输入是 double 还是 int