compare方法如何与返回值一起使用?在比较器类?

时间:2016-06-25 22:42:14

标签: java collections compare comparator

Collections.sort(list, new Comparator<Data>(){
          public int compare(Data obj1, Data obj2){
              return (obj1.value > obj2.value) ? -1: (obj1.value > obj2.value) ? 1:0 ;
          }
    });

我正在使用此代码按不升序对列表进行排序,此方法有效,但我不明白它是如何在内部工作的。

此代码如何处理返回值-1,1,0

为什么这种方法比较同样的事情(obj1.value > obj2.value)两次?

list是一个ArrayList类型引用变量,其中包含Data类型对象,Data类如下所示

private static class Data{
    private String key;
    private int value;

    public Data(String key, int value){
        this.key = key;
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}

1 个答案:

答案 0 :(得分:1)

一位评论者表示,您的比较方法编码不正确。第一次比较可能应该是<,而不是>。如果您要阅读Comparator<T> https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html的Javadoc,您会看到如果第一个参数在第二个参数之前它应该返回负值,如果它们是等价的则返回0,如果是等价则返回正值第一个参数跟随第二个。这不是你的代码所做的。