10

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

4

1 に答える 1

3

あなたがすでに行っている方法は、まさにあなたがすべきことです。

関連するhttps://code.google.com/p/guava-libraries/issues/detail?id=320での議論に興味があるかもしれません。(実際には、これはこれらのメソッドの実際の有効な使用例のようです。)

于 2012-11-23T16:00:33.453 に答える