java - 如何从 Iterable/Collection 创建 TreeMultimap?

标签 java guava

我正在尝试修剪 TreeMultimap,并返回相同结构的 TreeMultimap(但已修剪)。例如,我有不同的新闻提供者返回无序新闻。我需要按日期对新闻进行排序,并在按最近日期排序的多图中维护这种排序。然后我需要能够返回最新的 X 新闻。每个日期,可能有很多新闻。

TreeMultimap<Date, String> latestNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());

因为 TreeMultimap 没有修剪或大小,我设法返回一个 Iterable 并用它限制结果,但是如何创建一个新的TreeMultimap 来自 Iterable?

本质上,这个想法是:

  • 创建新的排序 TreeMultimap
  • 输入尽可能多的条目(
  • 修剪到X并返回 map

此外,如果我想实现类似分页的功能,那么不同的数据集呢?

这里以返回最近5条新闻为例

Map.Entry<Date, String> lastFiveNews = Iterables.limit(latestNews.entries(), 5)

但是我如何根据结果创建一个新的 Multimap?

最简单的方法就是迭代并创建一个新的 TreeMultimap:

TreeMultimap<Date, String> lastFiveNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());

for (Map.Entry<Date, String> dateStringEntry : Iterables.limit(latestNews.entries(), 5)) {
    lastFiveNews.put(dateStringEntry.getKey(), dateStringEntry.getValue());
}
latestNews.clear();
latestNews.putAll(lastFiveNews);

我想知道是否有一个实际的实用程序类/构造函数可以直接执行此操作。这种使用 Iterables 的方法是我唯一能想到的方法。可能还有其他方法。

最佳答案

您已经在做的方式正是您应该做的。

您可能对关于 https://code.google.com/p/guava-libraries/issues/detail?id=320 的讨论感兴趣,这是相关的。 (实际上,这似乎是这些方法的实际有效用例。)

关于java - 如何从 Iterable/Collection 创建 TreeMultimap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13527055/

相关文章:

java - (初学者)Java程序无故终止

java - future 实例列表

java - Java 结果集编码的有效方法

java - 使用资源插件从相邻的 Maven 模块复制静态文件和目录?

java - 创建类的扩展?

java - 使用谷歌集合映射相同的键和值

java - Google 集合不同谓词

java - 在 Spring MVC 中扩展带注释的 Controller

java - Guava 的 Cache<K, Semaphore> 和 weakValues() 是线程安全的吗?

java - Guava java EventBus实例化错误