我有一个拥有扑克牌等级的阵列: A,2,3,4,5,6,7,8,9,T,J,Q,K。(“T”代表10)。
我将所有这些存储在ArrayList中。
例如,我有一个代表俱乐部的ArrayList,并且其中包含所有卡牌:
ArrayList<Character> clubs = new ArrayList<Character>();
如果我打印此ArrayList中的所有元素,它们将按以下顺序打印出来:
3 2 4 5 6 8 7 9 T J Q K A
然后我添加了这个来对集合进行排序:
Collections.sort(clubs);
使用集合排序,它按以下顺序打印元素:
2 3 4 5 6 7 8 9 A J K Q T
如何制作以便按此顺序打印:?
A 2 3 4 5 6 7 8 9 T J Q K
答案 0 :(得分:1)
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
//write here the easy code to provide you the right order
//return -1 if a should appear before b or 1 otherwise
}
});
答案 1 :(得分:1)
您需要实施自己的comparator
public class CardComparator implements Comparator<Character>{
public int compare(Character c1, Character c2){
//implement your own logic for comparing.
}
}
实施后,您应该调用
Collections.sort(clubs, new CardComparator);
答案 2 :(得分:1)
实施java.util.Comparator
public class CharacterComparator implements Comparator<Character> {
public int compare(Character o1, Character o2) {
// ...
然后调用sort
List<Character> characters = ...
Collections.sort(characters, new CharacterComparator());
答案 3 :(得分:0)
作为实施您自己Comparator
的替代解决方案,请考虑使用Google Guava。该库包含许多有用的实用程序类和函数。
它提供了类Ordering
,这使得这很简单:
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
//explicitly state the ordering
Ordering<String> ordering = Ordering.explicit("A","1","2","K");
//create unsorted list
List<String> list = Lists.newArrayList("1","1","A","2","K","K","1","A");
System.out.println(ordering.sortedCopy(list)); //sort, but not in place
Collections.sort(list, ordering); //in place sort
System.out.println(list);