2014-12-19 49 views
0

我有一個java Set,我無法將其更改爲TreeSet,但我可以將其複製。這是問題:Java設置 - 如何根據名稱列表進行排序

我有名字,塔,汽車,建築,辦公室,地下室。我有一個POJO,它有一個字符串標籤變量,每個實例都包含一個這樣的變量。

我如何分類這些是塔,汽車,建築,辦公室,地下室的確切訂單。當然不會有重複(它是一套)。

public class Places{ 

String label; 
int moreinfo; 
} 

所以可以想象我有10個地方與標籤可以是任何塔,汽車,建築,辦公,對象地下室:我怎麼能進行排序,這些在一組,以確保他們在的確切順序「塔,車,建築,辦公室,地下室「?

+1

修改'Places'以實現'Comparable '。 –

回答

0

您可以使用地圖定義順序絃樂任意一組:

private static Map<String, Integer> ordering; 
static { 
    ordering = new HashMap<>(); 
    ordering.add("tower", 1); 
    ordering.add("car", 2"); 
    ...add your other strings with increasing values... 
} 

Collections.sort(yourCollection, new Comparator<Places>() { 
    public int compare(Places p1, Places p2) { 
     return ordering.get(p1.label) - ordering.get(p2.label); 
    } 
}); 

要小心,但是...你不能排序集。如果它是一個SortedSet(就像一個TreeSet),它將自行排序,如果它不是沒有定義的順序。

+0

PS當然,如果您使用Java 8,則可以使用lambda創建比較器 –

+0

謝謝@JeffreyBosboom,已修復。 –

1

您可以將字段'標籤'轉換爲enum值,其中枚舉值是按您的自定義順序排序的。

public enum Label { 
    TOWER, CAR, BUILDING, OFFICE, BASEMENT 
} 

然後,您可以實現一個可比較的,以排序集。

class Places implements Comparable<Places>{ 

    Label label; 
    int moreinfo; 
    @Override 
    public int compareTo(Places o) { 
     return label.compareTo(o.label); 
    } 
} 

然後,您可以使用Collections.sort方法進行排序。

+0

創造性的答案,但我不能改變我的實施。標籤是我的代碼中的一個字符串。加一。 – j2emanue

相關問題