Sé usar Collections.sort, pero solo ordena las cadenas que contienen letras. ¿Cómo puedo ordenar ArrayList por número y orden alfabético?
Si la cadena es un número que ya está siendo ordenadas (como una cadena, aunque) mira:
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);
}
}
imprime
$ java Sort
[3.1416, 7, Abcd, Kings]
es eso lo que necesita?
edición
Suponiendo (adivinar) lo que necesita es ordenar una baraja de cartas, que tienen ambos números y "letras" (J, Q, K, A) se puede tratar de utilizar una costumbre comparador.
Aquí hay una que tiene en cuenta los números "como números" el resto en forma de cadenas, por lo que "10" que viene después de "2", pero antes de "Reyes"
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]
Si eso es lo que necesita supongo esto te ayudaría a descubrir el resto. Probablemente la siguiente cosa sea cómo clasificar espadas vs. corazones.
Tras la respuesta por Roman se podría crear una clase e implementar la interfaz Comparable:
class Card implements Comparable<Card> {
public int compareTo(Card other) {
// add custom logic to compare one card with other
}
}
"Sé usar Collections.sort, pero solo ordena cadenas que contienen letras" ¿eh? – leonbloy
No estoy seguro de lo que está tratando de hacer, clasificando la colección ordenará todo (incluido "7") alfabéticamente. Los números se colocan antes que A, para que terminen en la parte superior. Si desea almacenar 7 en "s", debería crear un diccionario con algo así como la clase de diccionario Colecciones genéricas, que tiene la cadena de visualización "7", así como la representación de código/texto "Siete", o algo como eso. – Cobusve