这基本上不是如何根据键对 HashMap
进行排序。为此,我可以毫不费力地直接使用 TreeMap
:)
我现在有的是
Map<String, Object> favoritesMap = new HashMap<String, Object>();
and its contents can be
["Wednesdays" : "abcd"]
["Mondays" : "1234"]
["Not Categorized" : "pqrs"]
["Tuesdays" : "5678"]
我想根据键对 HashMap 进行排序,除此之外,我需要“未分类”作为最后一个检索。
因此在遍历 keySet 时预期是
["Mondays", "Tuesdays", "Wednesdays", "Not Categorized"] i.e. sorted on keys and "Not Categorized" is the last one
想在创建时使用 HashMap
并在最后添加 ["Not Categorized": "pqrs"]
但 HashMap
没有保证订单:)
解决方案的任何其他指示?
最佳答案
您是否出于某些外部原因专门排除了 TreeMap
?如果不是,您显然可以将 TreeMap
与特制的 Comparator
一起使用。
您是否考虑过任何其他 SortedMap
?
如果 TreeMap
确实不可用,我会扩展 HashMap
并使其看起来总是有一个条目,但这当然不是一项微不足道的工作。在走这条路之前,您应该有充分的理由不使用 SortedMap
。
已添加
下面是一个示例,说明如何使用 TreeMap
使特定条目始终排序到末尾:
// This key should always appear at the end of the list.
public static final String AtEnd = "Always at the end";
// A sample map.
SortedMap<String, String> myMap =
new TreeMap<>(
new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.equals(AtEnd) ? 1 : o2.equals(AtEnd) ? -1 : o1.compareTo(o2);
}
});
private void test() {
myMap.put("Monday", "abc");
myMap.put("Tuesday", "def");
myMap.put("Wednesday", "ghi");
myMap.put(AtEnd, "XYZ");
System.out.println("myMap: "+myMap);
// {Monday=abc, Tuesday=def, Wednesday=ghi, Always at the end=XYZ}
}
我想知道您是否正在寻找它的一些变体?
关于java - 基于键的Map排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623379/