Java中的比较器链
2022-09-03 12:32:37
阅读Oracle关于接口的Java教程,其中给出了一个关于(扑克牌)的例子,我试图理解接口中的默认方法。这是链接,“在现有接口中集成默认方法”部分。现在在最后一节中,他们首先按等级对卡牌进行排序,然后按套装排序。给出了以下逻辑。假设使用的任何接口、函数或类都已定义,并且函数采用Card
sort
Comparator
逻辑 1:
package defaultmethods;
import java.util.*;
import java.util.stream.*;
import java.lang.*;
public class SortByRankThenSuit implements Comparator<Card> {
public int compare(Card firstCard, Card secondCard) {
int compVal =
firstCard.getRank().value() - secondCard.getRank().value();
if (compVal != 0)
return compVal;
else
return firstCard.getSuit().value() - secondCard.getSuit().value();
}
}
逻辑 2:
myDeck.sort(
Comparator
.comparing(Card::getRank)
.thenComparing(Comparator.comparing(Card::getSuit)));
现在我在理解第二种逻辑时遇到了一些问题。我阅读了Java 1.8中包含的比较器接口和新的静态方法。现在我理解了类似的东西,它按等级排序,但是在阅读了当时的比较
文档之后,我无法理解如何返回实现上述逻辑1的比较器
。它是否在内部构建类似于逻辑 1 中指定的构造?myDeck.sort(Comparator.comparing(Card::getRank))
thenComparing
if-else