我在使用更复杂的地图时遇到了麻烦;对于标准Map<Long, String>
,我会做类似的事情:
Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myMap));
Map<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap, valueComparator);
但是我似乎无法让它像Map<Long, Map<String, String>>
那样仍然由Long命令。也许我错过了什么?下面不起作用......
Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myOtherMap));
Map<Long, Map<String, String>> orderedMyOtherMap = ImmutableSortedMap.copyOf(myOtherMap,valueComparator);
答案 0 :(得分:1)
你的第一个例子并没有做你似乎在说它正在做的事情。它正在创建一个按照每个String
键对应的Long
值排序的地图。如果您只想按键排序,那么您只需:
ImmutableSortedMap<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap);
同样的事情适用于Map<Long, Map<String, String>>
。您尝试做的不起作用的原因是Map<String, String>
不是Comparable
,因此没有自然顺序。
另外,可能想要考虑使用Table<Long, String, String>
而不是Map<Long, Map<String, String>>
。甚至还有TreeBasedTable将按行排序存储行和列键。