我正在尝试按两个字段对两个对象进行排序。一个布尔值和一个int。
但是我得到了一个“SELECT SCOPE_IDENTITY()
。
cannot resolve method" on the 'comparing' method
答案 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);
}