【发布时间】:2016-05-31 13:56:59
【问题描述】:
我目前有一个javaEntities:Cat和Kitten
下面是包含当前 comparator 逻辑的 Cat 实体,用于对 Cat 拥有最老小猫的 Cat 实体进行排序
public class Cat implements Comparable<Cat>
{
//other fields and methods
@OneToMany(mappedBy = "cat",fetch = FetchType.EAGER)
private List<Kitten> kittenList= new ArrayList<Kitten>();
public DateTime getOldestBornValueForKittenInList(){
return kittenList.stream().min(Comparator.comparing(Kitten::getBorn))
.get().getBorn();
}
public int compareTo(Cat c) {
//fist compare on the oldest Created DateTime Value
int i = getOldestBornValueForKittenInList().compareTo(c.getOldestBornValueForKittenInList());
if (i != 0){
return i;
}
}
}
我不再希望我的 Cat 实体实现 comparable 接口。我可以在我的应用程序中调用比较器吗?
即如果我想要 ordered Map 的猫和它们的小猫列表,其中最老的小猫是地图中的第一个条目:
Map<Cat, List<Kitten>> mapOfCatsAndKittens = new HashMap<Cat, List<Kitten>>();
【问题讨论】:
-
一般来说,在实体类中包含逻辑是不好的做法,使用自动装配实体的服务来应用您的逻辑
-
为什么不
TreeMap?它被设计为采用comparator。 -
@RoelStrolenberg 你能举例说明我可以用它来替换实体逻辑的服务吗?
-
@Tirath 谢谢,请举例说明如何将比较器添加到树形图中?
-
我从未说过添加。无论如何,您可以在这里查看 TreeMap -docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html。查看构造函数。你可以传入你的
comparator实现。
标签: java dictionary java-stream comparator