我正在修剪一个TreeMultimap,并且返回相同的结构化TreeMultimap(但是修剪).例如,我有不同的消息提供者返回无序的消息.我需要按日期对消息进行排序,并按照最近的日期在排序的多图中保持排序.那么我需要能够返回最新的X消息.按日期,可能有很多消息.
TreeMultimap latestNews = TreeMultimap.create(Ordering.natural().reverse(),Ordering.natural());
因为TreeMultimap没有修剪或大小,我已经设法返回一个Iterable并限制结果,但是如何从Iterable创建一个新的TreeMultimap?
基本上,这个想法是:
>创建新的排序TreeMultimap
>放入尽可能多的条目(可用)
>修剪到X并返回地图
另外,如果我想要实现类似功能的分页,那么不同的数据集呢?
以下是返回最近5条消息的例子
Map.Entry lastFiveNews = Iterables.limit(latestNews.entries(),5)
但是如何从结果中创建一个新的Multimap?
最简单的方法就像迭代和创建一个新的TreeMultimap一样简单:
TreeMultimap lastFiveNews = TreeMultimap.create(Ordering.natural().reverse(),Ordering.natural());
for (Map.Entry dateStringEntry : Iterables.limit(latestNews.entries(),5)) {
lastFiveNews.put(dateStringEntry.getKey(),dateStringEntry.getValue());
}
latestNews.clear();
latestNews.putAll(lastFiveNews);
我想知道是否有一个实际的类/构造函数可以直接做到这一点.这种使用Iterables的方法是我唯一能想到的.也可能有其他方法.