【问题标题】:Google Guava TreeMultimap -- retrieve values based on sorted ordering?Google Guava TreeMultimap - 基于排序的顺序检索值?
【发布时间】:2013-06-19 19:53:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java guava treemap


    【解决方案1】:

    TreeMultimap 不会以你想要的方式支持这个,我很确定。

    你可以做的是一个TreeMultimap&lt;Integer, String&gt;——交换键和值的角色——然后TreeMultimap.asMap().lastEntry()会给你一个Map.Entry&lt;Integer, Collection&lt;String&gt;&gt;,对应于最大的Integer和所有的@987654326 @s 与之关联。

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

    【讨论】:

      【解决方案2】:

      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() 返回一个NavigableSet,这意味着您可以调用first()last()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 2019-12-08
        • 1970-01-01
        相关资源
        最近更新 更多