我有这个代码来获取地图并按键对其进行排序 然后我反转地图以获得最大元素。
Ordering<String> valueComparator =
Ordering.natural().onResultOf(Functions.forMap(WordMap))
.compound(Ordering.natural());
WordMapSorted = ImmutableSortedMap.copyOf(WordMap,
Collections.reverseOrder(valueComparator));
我想知道两件事
如何才能获得值大于10的键?我觉得如果用番石榴进行分类,应该有一种简单的方法来指定一个截止点(因为一旦你达到一个低于阈值的值,你就会得到它之前的所有项目)
如何获取地图中的前100个条目(仍以地图的形式)。我知道我可以获得一组键并获得前100个,但我想要前100个地图条目。我知道通常地图没有顺序,但在这种情况下,它被排序并变为不可变,因此它确实有顺序。
答案 0 :(得分:4)
首先观察:当您可以使用Collections.reverseOrder(valueComparator)
时,无需使用valueComparator.reverse()
。
1需要一些技巧:
int index = Collections.binarySearch(WordMapSorted.values().asList(), 11);
index = (index >= 0) ? index : -index - 1;
// the elements at and after index have value strictly greater than 10
return WordMapSorted.keySet().asList().subList(index, WordMapSorted.size());
2是可行的:
WordMapSorted.headMap(WordMapSorted.keySet().asList().get(100));