2016-12-14 53 views
0

我有一個數據結構存儲在一個帶有多圖的地圖中,作爲我想按多個屬性排序的值。Java三個屬性,最佳存儲方式+排序

背景:我有一個JavaFX GridPane,我希望以有序的形式顯示一些東西。因此,對於GridPane中的每個點,我都有一些與它們相關的元素。我想根據字符串的字母順序來顯示元素。

我見現在以下:

Map<Coordinate, Multimap<Element, String>> myMap = new HashMap<Coordinate, Multimap<Element, String>>(); 

但對我來說是不明確的,如何做排序。正如您通過使用Multimap所看到的,一個元素可以有多個字符串。最後,我想通過Coordinate(x和y)以及每個座標的String屬性進行排序。怎麼做?或者有沒有人有更好的想法如何存儲這些屬性?

編輯:座標排序是容易的,而不是問題:

List<Coordinate> keys = new ArrayList<Coordinate>(myMap.keySet()); 
Comparator<Coordinate> comparator = Comparator.comparing(Coordinate::getX).thenComparing(Coordinate::getY); 
Collections.sort(keys, comparator); 

我剛纔解釋它,使我的問題清楚。主要問題是:如何爲每個座標的相關元素排序字符串。或者是一個「更好」的結構來保存屬性。

謝謝!

+1

可能使用[使用比較器進行自定義排序]的副本(http://stackoverflow.com/questions/5245093/using-comparator-to-make-custom-sort) – Idos

+1

排序好的座標不應該很難。 (可比較的界面)。第二個有點難,因爲你必須按價值排序,並且你必須決定你用來比較的multimap的哪個字符串值 – ParkerHalo

回答

1

哦該死。可以自己回答這個問題。我只是使String的關鍵和Element的價值。然後使用

ListMultimap<String, Element> lmm = Multimaps.newListMultimap(
new TreeMap<>(), ArrayList::new); 

如建議here。 Etvoilà...對於每個座標,內部地圖按字符串屬性排序。