私はCollections.sortを使用することを知っていますが、文字を含む文字列のみをソートします。ArrayListを番号とアルファベット順に並べ替えるにはどうすればよいですか?
文字列が数値の場合、すでに並べ替えられています(ただし、文字列として)。
import java.util.*;
class Sort {
public static void main( String [] args ) {
List list = Arrays.asList("Kings","7", "Abcd", "3.1416");
Collections.sort( list );
System.out.println( list );
}
}
プリント
$ java Sort
[3.1416, 7, Abcd, Kings]
それはあなたが必要なものですか?
編集
必要なのは、数字と「文字」(J、Q、K、A)の両方を持つトランプのデッキを並べ替えることであると仮定して(推測)、カスタムコンパレータを使用してみることができます。
これは、数字を「数字として」、残りを文字列として考慮したものです。したがって、「10」は「2」の後、「Kings」の前になります。
import java.util.*;
class Sort {
public static void main( String [] args ) {
List<String> list = Arrays.asList("Kings","7", "Queen", "3", "10", "A", "2", "8", "Joker");
Collections.sort( list , new Comparator<String>(){
public int compare( String a, String b ){
// if both are numbers
if( a.matches("\\d+") && b.matches("\\d+")) {
return new Integer( a ) - new Integer( b );
}
// else, compare normally.
return a.compareTo( b );
}
});
System.out.println( list );
}
}
$ java Sort
[2, 3, 7, 8, 10, A, Joker, Kings, Queen]
それがあなたが必要とするものであるならば、私はこれがあなたが残りを理解するのを助けるだろうと思います。おそらく次のことは、スペードとハートをどのように分類するかでしょう。
Romanの回答に従って、クラスを作成し、Comparableインターフェイスを実装できます。
class Card implements Comparable<Card> {
public int compareTo( Card other ) {
// add custom logic to compare one card with other
}
}