Guava返回键值高于某个阈值

时间:2013-07-03 20:31:42

标签: java sorting map guava

我有这个代码来获取地图并按键对其进行排序 然后我反转地图以获得最大元素。

Ordering<String> valueComparator = 
       Ordering.natural().onResultOf(Functions.forMap(WordMap))
                         .compound(Ordering.natural());

WordMapSorted = ImmutableSortedMap.copyOf(WordMap, 
                                  Collections.reverseOrder(valueComparator));

我想知道两件事

  1. 如何才能获得值大于10的键?我觉得如果用番石榴进行分类,应该有一种简单的方法来指定一个截止点(因为一旦你达到一个低于阈值的值,你就会得到它之前的所有项目)

  2. 如何获取地图中的前100个条目(仍以地图的形式)。我知道我可以获得一组键并获得前100个,但我想要前100个地图条目。我知道通常地图没有顺序,但在这种情况下,它被排序并变为不可变,因此它确实有顺序。

1 个答案:

答案 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));