集合并自然地订购地图<long,map <string,=“”string =“”>&gt; </long,>

时间:2011-06-30 15:49:10

标签: java map guava

我在使用更复杂的地图时遇到了麻烦;对于标准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);

1 个答案:

答案 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将按行排序存储行和列键。