比较'比较'无法解决方法

时间:2018-01-21 12:07:49

标签: java android comparator

我正在尝试按两个字段对两个对象进行排序。一个布尔值和一个int。 但是我得到了一个“SELECT SCOPE_IDENTITY()

cannot resolve method" on the 'comparing' method

2 个答案:

答案 0 :(得分:1)

以下是我如何在不使用Java 8 API的情况下编写您想要的compareTo()方法:

@Override
public int compareTo(MyViewModel another) {
    int enabledComparison = Boolean.compare(isEnabled(), another.isEnabled());

    if (enabledComparison != 0) {
        return enabledComparison;
    }

    return Integer.compare(getPriority(), another.getPriority());
}

不幸的是,Boolean.compare()Integer.compare()已在Android API 19中添加,您说您需要支持14,因此您甚至无法使用它。你必须手工写出来。

@Override
public int compareTo(MyViewModel another) {
    int enabledComparison = compare(isEnabled(), another.isEnabled());

    if (enabledComparison != 0) {
        return enabledComparison;
    }

    return compare(getPriority(), another.getPriority());
}

private static int compare(boolean a, boolean b) {
    if (a == b) {
       return 0;
    } else if (a) {
       return 1;
    } else {
       return -1;
    }
}

private static int compare(int a, int b) {
    if (a == b) {
        return 0;
    } else if (a > b) {
        return 1;
    } else {
        return -1;
    }
}

答案 1 :(得分:0)

您提供的代码确实适用于Java 8。

当您将以前的comparing参数从方法引用转换为m -> m.isEnabled时,它将像您所描述的那样报告can't resolve method 'isEnabled' in 'Object'

然后,您可以按如下所示明确指定m的类来解决它。

  @Override
    public int compareTo(MyViewModel another) {
       return Comparator.comparing((MyViewModel m) -> m.isEnabled)
              .thenComparingInt(MyViewModel::getPriority);
    }