Tôi biết sử dụng Collections.sort, nhưng nó chỉ sắp xếp Strings chứa chữ cái. Làm cách nào để có được ArrayList được sắp xếp theo số cũng như theo thứ tự bảng chữ cái?
Nếu chuỗi được một số nó đã được sắp xếp (như là một chuỗi mặc dù) xem xét:
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);
}
}
Prints
$ java Sort
[3.1416, 7, Abcd, Kings]
Là những gì bạn cần?
chỉnh sửa
Giả sử (đoán) những gì bạn cần là để sắp xếp một cỗ bài, trong đó có cả số và "chữ cái" (J, Q, K, A), bạn có thể thử sử dụng một tùy chỉnh so sánh.
Đây là một loại đưa vào xem xét những con số "như số" các phần còn lại như dây đàn, vì vậy "10" xuất phát sau khi "2" nhưng trước khi "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]
Nếu đó là những gì bạn cần tôi đoán điều này sẽ giúp bạn tìm ra phần còn lại. Có lẽ điều tiếp theo sẽ là làm thế nào để sắp xếp spades so với trái tim.
Sau câu trả lời bằng cách Roman bạn có thể tạo một lớp và thực hiện các giao diện Comparable:
class Card implements Comparable<Card> {
public int compareTo(Card other) {
// add custom logic to compare one card with other
}
}
"Tôi biết sử dụng Collections.sort, nhưng nó chỉ sắp xếp các chuỗi chứa các chữ cái" uh? – leonbloy
Không chắc chắn những gì bạn đang cố gắng làm, sắp xếp bộ sưu tập sẽ sắp xếp mọi thứ (bao gồm cả "7") theo thứ tự bảng chữ cái. Các số được đặt trước A, vì vậy chúng sẽ kết thúc ở trên cùng. Nếu bạn muốn 7 được lưu trữ dưới "s", bạn sẽ phải tạo một từ điển có thứ gì đó giống như lớp Từ điển bộ sưu tập chung, có chuỗi hiển thị "7" cũng như mã/văn bản đại diện "Bảy" hoặc một cái gì đó như thế. – Cobusve