【发布时间】:2016-08-22 10:13:06
【问题描述】:
我正在尝试使用以下格式创建TreeMap:
TreeMap<Kenel, List<Dog>> treeMapOfKennelsAndDogs;
每个条目都是一个Kennel 对象,并附有Dogs 列表。我想通过 每个犬舍中最年长的狗来比较每个犬舍并相应地排序。
但是treeMap 的顺序不是我所期望的,似乎当一个犬舍在列表中有一个 size 1 的狗列表时,排序是不正确的。
下面是我查找与每个 Kennel 相关的最古老 Dog 的代码,以及我的比较器逻辑。
@Entity
@Table(name = "KENNEL")
public class Kennel {
//other fields
@OneToMany(cascade = CascadeType.MERGE, orphanRemoval = true)
@JoinColumn(name = "KENNEL_ID", referencedColumnName = "ID", updatable = true, insertable = true)
private List<Dog> dogList;
public DateTime getOldestDogInList() {
if (dogList.size() == 0) {
return null; }
Dog dog= dogList.get(0);
for (int i = 1; i < dogList.size(); i++) {
dog d = dogList.get(i);
if (d.getCreated().isBefore(dog.getCreated())) {
dog = d;
}
}
return dog.getCreated();
}
服务类中的比较器逻辑:
Comparator<Kennel> oldestDog = new Comparator<Kennel>() {
@Override
public int compare(Kennel k1, Kennel k2) {
int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
return result;
}
};
TreeMap<Kennel, List<Dog>> treeMapOfKennelsAndDogs = new TreeMap<>(oldestDog);
代码中是否存在会导致 TreeMap 排序不正确的错误?
【问题讨论】:
-
如果
Kenel已经包含List<Dog>成员,为什么还需要TreeMap<Kenel, List<Dog>>?您可以改用TreeSet<Kenel>。 -
实际排序是什么?
-
拥有比其他人更年轻的狗的狗舍实际上在地图上更早?
-
这是有道理的,因为当您比较日期时,最早的日期在前。
-
我不明白你的意思?确定最老的应该排在树形图中的第一位吗?
标签: java list entity comparator treemap