をトリムしようとしています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 を使用するこのアプローチは、私が考えることができた唯一のものでした。他のアプローチもあるかもしれません。