按键排序HashMap?

jav*_*999 1 java spring entity hashmap

我有HashMap以下条目:

关键 - 狗对象 价值 - 狗的描述

Map<Dog, List<String>> DogsAndDescriptions;
Run Code Online (Sandbox Code Playgroud)

我想通过"Oldest Dog First"来命令HashMap .

狗是一个Entity具有以下字段,我想订购:

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

有可能这样做吗?

And*_*ken 5

这不可能,因为HashMaps特别是无序列表.

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

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

TreeMap是Map接口的一个实现,因此您可以像现在一样使用它进行交互.

TreeMap<Dog, List<String>> dogsAndDescriptions = new TreeMap<Dog, List<String>>();
Run Code Online (Sandbox Code Playgroud)

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

class Dog implements Comparable<Dog>{
    //somecode

    @Override
    public int compareTo(Dog o) {
        return birthday.compareTo(o.birthday);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以看到它会根据他们的生日来比较狗.我将在这里链接到一个例子,因为比较器的工作原理是我认为的另一个问题.但这是两种排序方式.