[英]How can I sort the keys of a Map in Java?
這是一個非常基本的問題,我對Java不太滿意。 我有一個Map,我想按排序順序得到一個列表或一些鍵,所以我可以迭代它們。
使用TreeMap
,它是SortedMap
接口的實現。 它按排序順序顯示其鍵。
Map<String, Object> map = new TreeMap<String, Object>();
/* Add entries to the map in any order. */
...
/* Now, iterate over the map's contents, sorted by key. */
for (Map.Entry<String, ?> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
如果您正在使用未按照您喜歡的方式排序的另一個Map實現,則可以將其傳遞給TreeMap
的構造函數以創建具有已排序鍵的新映射。
void process(Map<String, Object> original) {
Map<String, Object> copy = new TreeMap<String, Object>(original);
/* Now use "copy", which will have keys in sorted order. */
...
}
TreeMap
適用於實現Comparable
接口的任何類型的鍵,將它們置於“自然”順序中。 對於不可Comparable
鍵或其自然排序不是您需要的鍵,您可以實現自己的Comparator
並在構造函數中指定它。
你有幾個選擇。 按優先順序列出:
SortedMap
: SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);
最后兩個將為您提供您想要的,但只有在您只想迭代一次然后忘記整個事情時才應該使用。
您可以在迭代時創建已排序的集合,但首先有一個排序的映射更有意義。 (正如已經建議的那樣)
同樣,這是你如何做到這一點。
Map<String, Object> map;
for(String key: new TreeSet<String>(map.keySet()) {
// accessed in sorted order.
}
除了其他答案中提到的方法,使用Java 8流,從地圖獲取排序鍵列表的另一種簡寫方法是 -
List<T> sortedKeys = myMap.keySet().stream().sorted().collect(Collectors.toList());
實際上,人們可以在.sorted()
之后完成任務(比如使用.map(...)
或.forEach(...)
),而不是在列表中收集然后迭代列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.