gpt4 book ai didi

java - 在 Java 类中插入比较器类

转载 作者:行者123 更新时间:2023-12-01 18:05:38 25 4
gpt4 key购买 nike

我需要将比较器类添加到我用 Java 表示卡片的类中。一个比较器(compareAscending)将牌按升序排序,首先按花色排序,然后排名(即花色顺序为黑桃、红心、方 block 、梅花,然后按值(value)排序)。第二个比较器 (compareRank) 按排名升序排序,即首先是所有的二,然后是所有的三。 。

花色和等级都是枚举,它们的代码如下

enum Rank {

TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

private int value;

Rank(int i) {
value = i;
}

public int getValue() {
return value;
}

public Rank getPrevious() {
return values()[ordinal() > 0 ? ordinal() - 1 : 0];
}

}

enum Suit {

CLUBS, DIAMONDS, HEARTS, SPADES;

public static Suit randomSuit() {
Random random = new Random();
return values()[random.nextInt(values().length)];
}
}

我以前从未使用过比较器类,所以想知道是否有人可以解释我如何插入它们?它们与使类具有可比性(确实如此)相同吗?

提前致谢。

最佳答案

一个Comparator<Card>或多或少与实现 Comparable<Card> 相同:

a.compareTo(b)

变成了

comparator.compare(a, b);

您甚至可以使用为 compareTo 定义的比较器之一避免重复代码的方法:

public class Card implements Comparable<Card> {
public static final Comparator<Card> COMPARE_ASCENDING = (a, b) -> { /* compare here */ };
public static final Comparator<Card> COMPARE_DESCENDING = (a, b) -> { /* compare here */ };

@Override
public int compareTo(Card other) {
// Ascending is the "default" sort:
return COMPARE_ASCENDING.compare(this, other);
}
}

然后你可以这样使用:

List<Card> cards = ...;
Collections.sort(cards); // #1
Collections.sort(cards, Card.COMPARE_ASCENDING); // #2, same as #1
Collections.sort(cards, Card.COMPARE_DESCENDING); // #3

您还可以添加其他常见的比较器,例如将 A 视为低牌而不是高牌的比较器。游戏还可以实现自己的特定于游戏的比较器,但这些不会出现在您的 Card 中。类。

关于java - 在 Java 类中插入比较器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com