2016-02-01 20 views
5

Tôi muốn in một danh sách sắp xếp theo Bản đồ sử dụng như sau:Làm thế nào để đảo ngược thứ tự của SortedSet

Map<Float, String> mylist = new HashMap<>(); 

mylist.put(10.5, a); 
mylist.put(12.3, b); 
mylist.put(5.1, c); 

SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()); 

for (Float i : orderlist) { 
    System.out.println(i+" "+mylist.get(i)); 
} 

Các bản in mã trên:

5.1 c 
10.5 a 
12.3 b  

Nhưng làm cách nào để in các orderlist theo thứ tự ngược như dưới đây:

12.3 b 
10.5 a 
5.1 c 
+0

Bạn có chống lại cách đặt các mục từ tập trong một cấu trúc dữ liệu? Ngoài ra, bạn có cần phải có các mục trong 'SortedSet' theo thứ tự cụ thể mà chúng đã có, hoặc bạn sẽ ổn với việc lưu trữ chúng theo thứ tự ngược lại? – augray

+0

Tôi chỉ muốn in danh sách. Không có yêu cầu để SortedSet nếu có một cách tốt hơn. Nó là ok nếu tôi có thể lưu trữ các mặt hàng theo thứ tự ngược lại. – user2109581

Trả lời

2

Cố gắng sử dụng NavigableSet:

public NavigableSet<E> descendingSet() 

Như thế này:

SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()); 
    SortedSet<Float> treereverse = new TreeSet<Float>(); 
    // creating reverse set 
    treereverse=(TreeSet)orderlist.descendingSet(); 

Cuối cùng, bạn có treereverse với thứ tự ngược lại.

4

Nếu bạn sẵn sàng để lưu trữ các yếu tố trong SortedSet theo thứ tự ngược, sự thay đổi duy nhất mà bạn cần phải thực hiện là xây dựng các TreeSet với an appropriate constructor mà phải mất một tùy chỉnh Comparator:

Map<Float, String> mylist = new HashMap<>(); 

mylist.put(10.5, a); 
mylist.put(12.3, b); 
mylist.put(5.1, c); 

SortedSet<Float> orderlist = new TreeSet<Float>(Collections.reverseOrder()); 
orderList.addAll(mylist.keySet()); 

for (Float i : orderlist) { 
    System.out.println(i+" "+mylist.get(i)); 
} 

Lưu ý gọn gàng phương pháp ở đây là Collections.reverseOrder() trả về một số Comparator so sánh với thứ tự ngược lại của thứ tự các phần tử.

+0

Cảm ơn, điều đó thật tuyệt vời! – user2109581

+2

Không sao cả! [SO nghi thức cho một cảm ơn bạn là một upvote và một "đánh dấu là câu trả lời"] (http://meta.stackexchange.com/questions/126180/is-it-acceptable-to-write-a-thank-you- trong một bình luận) ;-) – augray

3

Bạn cũng có thể thử điều này:

Map<Float, String> mylist = new HashMap<Float, String>(); 
    mylist.put(10.5, a); 
    mylist.put(12.3, b); 
    mylist.put(5.1, c); 

    SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()).descendingSet(); 

    for (Float i : orderlist) { 
     System.out.println(i+" "+mylist.get(i)); 
    } 
Các vấn đề liên quan