Я знаю, как использовать 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», но перед «королями»
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
}
}