我正在为Java 8证书做准备,以下内容让我有些困惑,希望有人可以帮助我。 在示例中,建立了一个松鼠类。它有一个名称和一个重量。现在您可以创建一个Comparator类来使用这两个字段对此进行排序。所以首先按名称排序,然后按重量排序。像这样:
public class ChainingComparator implements Comparator<Squirrel> {
public int compare(Squirrel s1, Squirrel s2) {
Comparator<Squirrel> c = Comparator.comparing(s -> s.getSpecies());
c = c.thenComparingInt(s -> s.getWeight());
return c.compare(s1, s2);
}
}
到目前为止一切都很好...但是接下来是令人困惑的部分。在代码示例下面,他们声明可以使用方法链接将此写成一个单独的行。也许我误解了,但是当我链接comparing和thenComparing部分时,我会得到编译错误。这与比较的对象类型有关(首先是String,然后是int)。
为什么当我放一个中间变量而不是链接时它能工作呢?是否可以进行链接?
Comparator<Squirrel> c = Comparator.comparing((Squirrel s) -> s.getSpecies()).thenComparingInt(s -> s.getWeight());
(该代码为Java语言,用于比较松鼠对象的物种和重量属性,并按照物种进行首要排序,按照重量进行次要排序) - SEY_91