我有一个包含以下条目的 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/