2

我正在尝试实现需要对<Destination -> Quantity>地图值进行排序的东西,例如:

<San Francisco -> 10, Seattle -> 20, LA -> 10}

这些值不一定是不同的。我希望能够检索具有最大值和最小值的键/值对,类似于 TreeMap 能够对键执行的操作。

我找到了 Google Guava 的 TreeMultimap,它是 Multimap 的一个实现,它的键和值按其自然顺序或提供的比较器排序。问题是,TreeMultimap 似乎没有任何方法可以让我根据键或值的顺序检索键/值对(pollFirstEntry()例如,在 TreeMap 中所做的)。

在这个程度上,我对如何让 TreeMultimap 获得这个功能有点困惑。我觉得它应该可以工作,也许这只是我如何实例化对象的问题?

4

2 回答 2

2

TreeMultimap不会以您正在寻找的方式支持这一点,我很确定。

你可以做的是 a TreeMultimap<Integer, String>- 交换键和值的角色 - 然后TreeMultimap.asMap().lastEntry()会得到 a Map.Entry<Integer, Collection<String>>,对应于最大的和与之关联的Integer所有s。String

绝对不支持的一件事是将所有TreeMultimap键的组合值视为单个排序集合。(当然,您可以将它们视为未排序的集合。)values()

于 2013-06-19T20:31:32.963 回答
0

确实TreeMultimap根据值比较器对值进行排序,但排序仅与映射到同一键的其他值相关。所以,例如,如果你有

 a => 3
 a => 1
 b => 4
 b => 2

而你迭代了entries(),你应该得到[(a, 1), (a, 3), (b, 2), (b, 4)]。同样,如果您遍历values(),您应该得到[1, 3, 2, 4],因为它按顺序返回 的值a,然后按顺序返回 的值b

获取第一个或最后一个很简单,因为keySet()返回 a ,NavigableSet这意味着你可以调用它。first()last()

于 2013-06-19T20:34:07.160 回答