假设我有一个包含216个条目的LinkedHashMap
,我如何从Object
获取前100个值(此处为LinkedHashMap<Integer, Object>
类型)。
答案 0 :(得分:5)
首先,根据您的标题为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);
然后,您可以从中创建一个列表,或者对其进行迭代,或者您想要做的任何事情。
答案 1 :(得分:3)
你可以这样做:
Map<Integer, Object> records;
List<Entry<Integer, Object>> firstHundredRecords
= new ArrayList<Entry<Integer, Object>>(records.entrySet()).subList(0, 100);
虽然请注意这将复制地图中的所有条目。
答案 2 :(得分:3)
使用库仅复制所需的记录。
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;
}
答案 3 :(得分:3)
这个丑陋的单行会做(并在问题的情况下返回ArrayList<Object>
):
Collections.list(Collections.enumeration(lhMap.values())).subList(0, 100)
这也适用于HashMap
,但HashMap
由HashSet
支持,并不保证您将获得输入的前100个值;它可以用于其他类型,具有类似的限制。
备注:强>
(根据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);
}
答案 4 :(得分:-1)
你可以使用计数器。当你的计数器达到100时,你的foreach循环将退出。
答案 5 :(得分:-2)
写一个使用Iterator.next()
100次的循环,然后停止。
我要说一些关于NavigableMap
和SortedMap
的内容 - 但是它们的接口是根据键而不是索引来定义的。但它们可能会有用,具体取决于您的实际根本问题。