2016-03-03 33 views
8

Làm cách nào để sắp xếp danh sách các danh sách bằng Java theo thứ tự từ điển bằng cách sử dụng Collections.sort() hoặc phương pháp sắp xếp khác?Danh sách các danh sách sắp xếp Java

private List<List<Integer>> possiblePoles = setPoles();  
System.out.println(possiblePoles) 
[[1, 3, 5], [1, 2, 3]] 
+0

Bằng cách thực hiện sắp xếp theo mình? – MikeCAT

+0

Không, có thể là một hàm Java. – Nic

+0

http://stackoverflow.com/questions/2999129/how-do-i-sort-an-arraylist-lexicographically – developer033

Trả lời

9

Bạn sẽ phải thực hiện lớp Comparator của riêng bạn và vượt qua trong một ví dụ để Collections.sort()

class ListComparator<T extends Comparable<T>> implements Comparator<List<T>> { 

    @Override 
    public int compare(List<T> o1, List<T> o2) { 
    for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) { 
     int c = o1.get(i).compareTo(o2.get(i)); 
     if (c != 0) { 
     return c; 
     } 
    } 
    return Integer.compare(o1.size(), o2.size()); 
    } 

} 

Sau đó sắp xếp rất dễ dàng

List<List<Integer>> listOfLists = ...; 

Collections.sort(listOfLists, new ListComparator<>()); 
+0

Thậm chí tốt hơn: Bởi vì Java sử dụng loại tẩy xoá, bạn có thể tạo một thể hiện đơn lẻ của ListComparator và làm các phôi không an toàn (đó là không trạng thái). – Nayuki

+0

@Nayuki, tôi không muốn làm điều đó bởi vì tôi không muốn mang theo trường hợp mãi mãi, chỉ vì tôi đã sử dụng nó một lần. Dấu chân bộ nhớ có thể rất nhỏ nhưng do đó chi phí tạo ra một đối tượng. Nhưng mọi người có thể làm bất cứ điều gì họ muốn ^^ – MartinS

+0

Tôi muốn sử dụng 'int c = ObjectUtils.compare (o1.get (i), o2.get (i))'. Nếu không, bạn sẽ nhận được NPE nếu 'o1.get (i) == null'. ('ObjectUtils' là từ thư viện commache commons) –

Các vấn đề liên quan