私はTreeMultimap
をトリムしようとしており、同じ構造のTreeMultimap
が返されましたが、トリミングされています。たとえば、私は順序付けられていないニュースを返す異なるニュースプロバイダを持っています。私は日付でニュースをソートし、ソートされたマルチマップで最新の日付でこのソートを維持する必要があります。それから私は最新のXニュースを返す能力が必要です。日付ごとに、多くのニュースがあるかもしれません。Iterable/CollectionからTreeMultimapを作成するには?
TreeMultimap<Date, String> latestNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());
全くトリム、またはTreeMultimap
のサイズがないので、私はIterable
を返し、それを使用して結果を制限するために管理してきましたが、どのようにIterable
から新しいTreeMultimap
を作成するには?
基本的に、アイデアがある:
- は、できるだけ多くのエントリ(
- Xにトリミングしてもマップに
を返す利用可能であるように置く新しいソートTreeMultimap
最後の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を使用したこのアプローチでした。他のアプローチもあります。
'Iterable'があり、その中から 'TreeMultimap'を作成しますか?ここではIterables#limitを見つけることはできませんhttp://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.htmlそれは何ですか? –
こんにちは、これはGoogleのコレクションではなく、グアバです。 http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Iterables.html – Tony
ああ、「Iterables.limit」は「Iterable」を返しますlast.Nexts(lastNews.entries()、5) '' Iterable 'をしたくないのですか? –