在没有*使用值的情况下在java *中排序对象

时间:2015-04-07 14:40:38

标签: java libraries partial-ordering

我想创建一个对象类来相互比较,而不使用值来比较它们。 Java中是否有能够为我提供此功能的库?在排序方面,最常提到的库是Comparator,但到目前为止我看到的所有示例都使用对象中的某些值来执行此排序。

例如,我希望能够在一类对象中说:

对象A比对象B更重要。 对象B比对象C更重要。

因此,我希望库能够执行某种分析,并能够根据这些值对项目进行排序,并告诉我,上述值的顺序为A,B,C ,按此顺序。

是否有能够在Java中执行此操作的库?

1 个答案:

答案 0 :(得分:0)

你在想这样的事吗?

enum Importance {

    High,
    Medium,
    Low;
}

class Thing implements Comparable<Thing> {

    private Importance importance = Importance.Medium;

    public Importance getImportance() {
        return importance;
    }

    public void setImportance(Importance importance) {
        this.importance = importance;
    }

    @Override
    public int compareTo(Thing o) {
        return importance.compareTo(o.importance);
    }

}

或者 - 如果要控制每个对象的相关性,则将其记录在Map中。您需要小心严格控制地图以确保没有循环 - 如果有,那么您的排序将变得不稳定。

static Map<Thing, Set<Thing>> moreImportant = new HashMap<>();

class Thing implements Comparable<Thing> {

    @Override
    public int compareTo(Thing o) {
        Set<Thing> more = moreImportant.get(this);
        return more == null ? 0 : more.contains(o) ? 1 : -1;
    }

}