Java 比较器';比较';无法解析方法
我试着用两个字段对两个对象进行排序。一个布尔值和一个整数。 但是,我在“比较”方法上得到了一个“Java 比较器';比较';无法解析方法,java,android,comparator,Java,Android,Comparator,我试着用两个字段对两个对象进行排序。一个布尔值和一个整数。 但是,我在“比较”方法上得到了一个“无法解析方法” @Override public int compareTo(MyViewModel another) { return Comparator.comparing(MyViewModel::isEnabled) .thenComparingInt(MyViewModel::getPriority); } 下面是在不使用Java 8 API的情况下编写您想要的
无法解析方法”
@Override
public int compareTo(MyViewModel another) {
return Comparator.comparing(MyViewModel::isEnabled)
.thenComparingInt(MyViewModel::getPriority);
}
下面是在不使用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());
}
不幸的是,Android API 19中添加了Boolean.compare()
和Integer.compare()
,您说需要支持返回到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;
}
}
下面是在不使用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());
}
不幸的是,Android API 19中添加了Boolean.compare()
和Integer.compare()
,您说需要支持返回到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;
}
}
您提供的代码可用于Java8 当您将前面的
比较
参数从方法引用转换为m->m.isEnabled
时,它将报告无法解析“Object”中的方法“isEnabled”
然后,您可以显式地指定m
类来解析它
@Override
public int compareTo(MyViewModel another) {
return Comparator.comparing((MyViewModel m) -> m.isEnabled)
.thenComparingInt(MyViewModel::getPriority);
}
您提供的代码可用于Java8 当您将前面的
比较
参数从方法引用转换为m->m.isEnabled
时,它将报告无法解析“Object”中的方法“isEnabled”
然后,您可以显式地指定m
类来解析它
@Override
public int compareTo(MyViewModel another) {
return Comparator.comparing((MyViewModel m) -> m.isEnabled)
.thenComparingInt(MyViewModel::getPriority);
}
你确定你的IDE编译器是为Java 8或更高级的源代码配置的吗?嗯,让我觉得你没有使用Java 8。我使用的是Android Studio。我在哪里可以检查它的配置是否适用?您可以在Android上使用Java 8语言功能(lambdas、方法引用)(使用Gradle build plugin 3.x.x)。在min SDK 26之前,您不能使用Java 8语言API(Java.time,函数接口)。这意味着,即使您启用Java 8兼容性,您的应用程序也将在运行早于8.0.ohh的Android设备上崩溃。。这是个问题,我必须支持14分钟的skd。这怎么可能不是用java 8实现的?你确定你的IDE编译器是为java 8或更高级的源代码配置的吗?hmm让我觉得你不是在用java 8。我在用Android Studio。我在哪里可以检查它的配置是否适用?您可以在Android上使用Java 8语言功能(lambdas、方法引用)(使用Gradle build plugin 3.x.x)。在min SDK 26之前,您不能使用Java 8语言API(Java.time,函数接口)。这意味着,即使您启用Java 8兼容性,您的应用程序也将在运行早于8.0.ohh的Android设备上崩溃。。这是个问题,我必须支持14分钟的skd。不使用Java8怎么能实现呢?