0

我有一个包含扑克牌等级的数组: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
4

4 回答 4

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
        }

    });
于 2013-09-25T13:44:48.060 回答
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);
于 2013-09-25T13:45:11.180 回答
1

实现 java.util.Comparator

public class CharacterComparator implements Comparator<Character> {
    public int compare(Character o1, Character o2) { 
        // ...

然后调用排序

List<Character> characters = ...
Collections.sort(characters, new CharacterComparator());
于 2013-09-25T13:48:52.780 回答
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); 
于 2013-09-25T13:50:00.083 回答