【问题标题】:Iterate over a subset of a ListMultiMap迭代 ListMultiMap 的子集
【发布时间】:2020-07-28 01:20:17
【问题描述】:

我有一个最初使用以下语句创建的 Multimap:

ListMultimap<String, MyCustomObject> ids = MultimapBuilder.treeKeys().arrayListValues().build();

我希望能够提供一个偏移量和一个限制,以便我可以将我的多图转换为一个较小的多图,该多图仅包含原始多图的第 5 和第 10 个元素之间的键(以及它们对应的值)。原始的Multimap 可能有大量的键,所以我不想遍历键并调用 ids.get(key) 如果我可以避免它,因为它可能很慢。有没有这样做的好方法?如果您的解决方案包含 ids.get(key) 也没关系,如果可能的话,我只是更喜欢不这样做的解决方案。

【问题讨论】:

  • 我不明白这一点:原来的 Multimap 可能有大量的键,所以我不想遍历键并调用 ids.get(key) 如果可以避免的话,因为它可能很慢。多哈希图中有多少元素并不重要,这取决于您想要获得多少元素!
  • 可能没有不迭代某些键的解决方案,但您可以有一个仅迭代 10 个键的解决方案。
  • 可以接受

标签: java algorithm data-structures guava multimap


【解决方案1】:

如果您正在谈论来自番石榴的ListMultiMap,很遗憾您没有太多选择,但我可以想到一些可能会有所帮助。由于ListMultiMap 没有实现ListMap,因此您需要获取条目并转换为列表,因此列表/数组还有O(1) 时间操作,因此调用List list = new ArrayList(ids.entries()) 不会花费任何费用,从这里你可以得到列表的一个子集,就像你用List smallList = list.subList(5, 11) 其他 O(1) 操作所说的那样,因为 List 使用数组,它不需要迭代来到达这些元素来创建一个新列表,只需选择元素位置之间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2015-08-12
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多