Java 树映射比较器未给出预期的顺序?
我正在尝试创建具有以下格式的Java 树映射比较器未给出预期的顺序?,java,list,entity,comparator,treemap,Java,List,Entity,Comparator,Treemap,我正在尝试创建具有以下格式的树状图: TreeMap<Kenel, List<Dog>> treeMapOfKennelsAndDogs; 服务类中的比较器逻辑: Comparator<Kennel> oldestDog = new Comparator<Kennel>() { @Override public int compare(Kennel k1, Kennel k2) {
树状图
:
TreeMap<Kenel, List<Dog>> treeMapOfKennelsAndDogs;
服务类中的比较器逻辑:
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);
比较器oldestDog=新比较器(){
@凌驾
公共整数比较(犬舍k1、犬舍k2){
int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
返回结果;
}
};
TreeMap treeMapOfKennelsAndDogs=新的TreeMap(旧的);
代码中是否存在会导致树映射中顺序错误的错误
服务类中的比较器逻辑:
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);
TreeSet不知道您的服务类别。它只知道内部的泛型类型
第一个解决方案:
比较器逻辑应位于将在TreeSet
中排序的类中。您应该在Kennel
类中实现Comparator
和ovveradecompare
方法
第二次解决方案:
创建树映射时设置比较器
TreeMap<Kenel, List<Dog>> treemap = new TreeMap<Kenel, List<Dog>>(new Comparator<Kenel>() {
public int compare(Kennel k1, Kennel k2) {
int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
return result;
}
});
TreeMap TreeMap=newtreemap(newcomparator(){
公共整数比较(犬舍k1、犬舍k2){
int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
返回结果;
}
});
相关问题:
服务类中的比较器逻辑:
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);
TreeSet不知道您的服务类别。它只知道内部的泛型类型
第一个解决方案:
比较器逻辑应位于将在TreeSet
中排序的类中。您应该在Kennel
类中实现Comparator
和ovveradecompare
方法
第二次解决方案:
创建树映射时设置比较器
TreeMap<Kenel, List<Dog>> treemap = new TreeMap<Kenel, List<Dog>>(new Comparator<Kenel>() {
public int compare(Kennel k1, Kennel k2) {
int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
return result;
}
});
TreeMap TreeMap=newtreemap(newcomparator(){
公共整数比较(犬舍k1、犬舍k2){
int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
返回结果;
}
});
相关问题:
Map
键的逻辑不应依赖于V
类映射中插入后是否修改关键点实例?如果是,这是一个问题。相等性检查仅在插入时进行*
Map
键的逻辑不应依赖于V
类映射中插入后是否修改关键点实例?如果是,这是一个问题。相等性检查仅在插入时进行*
如果
Kenel
已经包含列表
成员,为什么需要树映射
?你可以使用TreeSet
来代替。实际的分类是什么?有比其他狗更年轻的狗的犬舍实际上在地图上更早?这是有道理的,因为当你比较日期时,最早的先到。我不知道你的意思是什么?当然最老的应该是树状图中的第一个?如果Kenel
已经包含列表
成员,为什么需要treemap
?你可以使用TreeSet
来代替。实际的分类是什么?有比其他狗更年轻的狗的犬舍实际上在地图上更早?这是有道理的,因为当你比较日期时,最早的先到。我不知道你的意思是什么?当然最老的应该是树映射中的第一个?我不能改变这个Kennel类,因为它是遗留代码。这就是为什么我要采用当前的方法?@java123999,创建适配器模式
:创建扩展犬舍
的新类,实现比较器
。如果不实现Comparator
@java123999,您的树映射自动排序将不会成功,我编辑了我的问题。我通过设置Comparator
dynamicallyI添加了解决方案,因为它是遗留代码,所以我无法更改这个犬舍类。这就是为什么我要采用当前的方法?@java123999,创建适配器模式
:创建扩展犬舍
的新类,实现比较器
。如果不实现Comparator
@java123999,您的树映射自动排序将不会成功,我编辑了我的问题。我添加了动态设置比较器的解决方案