写一段java把泛型为Card的List排序,Card类中有String类型花色和int类型点数,点数不同时从小到大派,点数相同时按Spade, Heart, Diamond, Club顺序排
时间: 2024-02-12 22:07:39 浏览: 85
浅谈java中定义泛型类和定义泛型方法的写法
下面是一个Java代码示例,可以对泛型为 `Card` 的列表进行排序:
```java
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CardSorter {
public static void sort(List<Card> cards) {
Collections.sort(cards, new Comparator<Card>() {
@Override
public int compare(Card c1, Card c2) {
// 比较点数
int result = Integer.compare(c1.getRank(), c2.getRank());
if (result != 0) {
return result;
}
// 点数相同,比较花色
return compareSuits(c1.getSuit(), c2.getSuit());
}
});
}
private static int compareSuits(String s1, String s2) {
String[] suits = {"Spade", "Heart", "Diamond", "Club"};
int i1 = indexOf(suits, s1);
int i2 = indexOf(suits, s2);
return Integer.compare(i1, i2);
}
private static int indexOf(String[] array, String value) {
for (int i = 0; i < array.length; i++) {
if (array[i].equals(value)) {
return i;
}
}
return -1;
}
}
```
在这个代码中,我们使用了 `Collections.sort` 方法来对 `Card` 列表进行排序。我们传入了一个 `Comparator` 对象,它定义了如何比较两张牌的大小。
在 `Comparator` 的 `compare` 方法中,我们首先比较两张牌的点数。如果点数不同,我们就返回它们的点数差值;否则,我们比较它们的花色。为了方便比较,我们把花色按照 Spade、Heart、Diamond、Club 的顺序排成一个数组,然后使用 `indexOf` 方法来查找它们在数组中的位置。
最后,我们可以通过调用 `CardSorter.sort(cards)` 来对一个 `Card` 列表进行排序。
阅读全文