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

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

因为没有修剪或TreeMultimap的大小,所以我设法返回了Iterable并以此限制了结果,但是如何从TreeMultimap创建新的Iterable呢?

本质上,这个想法是:
  • 创建新的排序的TreeMultimap
  • 放置了尽可能多的条目(
  • 修剪为X并返回地图

  • 另外,例如,如果要实现类似分页的功能,如何处理不同的数据集呢?

    例如,这是如何返回最近的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的讨论感兴趣。 (实际上,这似乎是这些方法的实际有效用例。)

    07-24 09:36