216 個のエントリを含むがあるとします。 から最初の 100 個の値 (ここでは 型)LinkedHashMap
を取得するにはどうすればよいでしょうか。Object
LinkedHashMap<Integer, Object>
6 に答える
HashMap
まず、タイトルどおりにこれを行うことはあまり意味HashMap
がありません。特定の順序はなく、呼び出し間で順序が変わる場合があります。しかし、それはより理にかなってLinkedHashMap
います。
そこで、GuavaのIterables.limit
方法を使用します。
Iterable<Object> first100Values = Iterables.limit(map.values(), 100);
また
// Or whatever type you're interested in...
Iterable<Map.Entry<Integer, Object>> firstEntries =
Iterables.limit(map.entrySet(), 100);
次に、それからリストを作成するか、それを反復処理するか、またはやりたいことが何でもできます。
醜いワンライナー
この醜いワンライナーはそうするでしょう(そしてArrayList<Object>
質問の場合にはaを返します):
Collections.list(Collections.enumeration(lhMap.values())).subList(0, 100)
これはHashMap
同様に機能しますが、HashMap
に裏打ちされて、HashSet
入力された最初の100個の値を取得する保証はありません。他のタイプでも機能しますが、同様の制限があります。
ノート:
- 比較的非効率的です(Javadocを読んで理由を確認してください-もっと悪いですが!)、
- ビューを使用するときは注意してください(詳細については、Javadocをお読みください)。
- 私はそれが醜いことを述べました。
ステップバイステップの使用例
(OPのコメントによる)
Map<Integer, Pair<Double, SelectedRoad>> hashmap3 =
new LinkedHashMap<Integer, Pair<Double, SelectedRoad>>();
// [...] add 216 elements to hasmap3 here somehow
ArrayList<Pair<Double,SelectedRoad>> firstPairs =
Collections.list(Collections.enumeration(hashmap3.values())).subList(0, 100)
// you can then view your Pairs' SelectedRow values with them with:
// (assuming that:
// - your Pair class comes from Apache Commons Lang 3.0
// - your SelectedRoad class implements a decent toString() )
for (final Pair<Double, SelectedRoad> p : firstPairs) {
System.out.println("double: " + p.left);
System.out.println("road : " + p.right);
}
できるよ:
Map<Integer, Object> records;
List<Entry<Integer, Object>> firstHundredRecords
= new ArrayList<Entry<Integer, Object>>(records.entrySet()).subList(0, 100);
ただし、これによりマップからすべてのエントリがコピーされることに注意してください。
ライブラリを使って必要なレコードだけをコピーしたい。
Map<Integer, Object> records;
List<Entry<Integer, Object>> firstHundredRecords = new ArrayList<>();
for(Entry<Integer, Object> entry : records.entrySet()) {
firstHundredRecords.add(entry);
if (firstHundredRecords.size()>=100) break;
}
カウンターをご利用いただけます。foreach ループは、カウンターが 100 に達すると終了します。
Iterator.next()
a を100 回使用して停止するループを作成します。
NavigableMap
andについて何か言おうとしSortedMap
ましたが、それらのインターフェイスはインデックスではなくキーの観点から定義されています。ただし、実際の根本的な問題が何であるかによっては、それでも役立つ場合があります。