我正在尝试修剪 a 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 的方法是我能想到的唯一方法。可能还有其他方法。