这里不应该引用Java方法

Nem*_*Sol 5 java lambda comparator java-8 method-reference

您如何精确链接Java 8实例的方法引用?例:

Collections.sort(civs,Comparator.comparing(Civilization::getStrategy.getStrategLevel));
Run Code Online (Sandbox Code Playgroud)

getStrategy一个的Civilization实例返回一个Strategy具有实例方法的对象实例getStrategyLevel

为什么该Comparator.comparing方法不返回带有由lambda表达式实现的功能接口的比较器?

And*_*lko 4

在这种情况下,您应该使用 lambda,不能直接应用方法引用:

Collections.sort(civs, Collectors.comparing(c -> c.getStrategy().getStrategLevel()));
Run Code Online (Sandbox Code Playgroud)

不过,这里有一种方法可以使用方法引用。假设你有一堂课

class CivilizationUtils {
    public static Integer getKeyExtractor(Civilization c) {
        return c.getStrategy().getStrategLevel();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题可以像这样解决

Collections.sort(civs, Collectors.comparing(CivilizationUtils::getKeyExtractor));
Run Code Online (Sandbox Code Playgroud)