假设我有 aLinkedHashMap
包含 216 个条目,我将如何Object
从 a 获取前 100 个值(此处为 type )LinkedHashMap<Integer, Object>
。
问问题
5995 次
6 回答
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);
然后,您可以从中创建一个列表,或者对其进行迭代,或者做任何您想做的事情。
于 2012-02-28T13:12:40.617 回答
3
你可以做:
Map<Integer, Object> records;
List<Entry<Integer, Object>> firstHundredRecords
= new ArrayList<Entry<Integer, Object>>(records.entrySet()).subList(0, 100);
尽管请注意,这将复制地图中的所有条目。
于 2012-02-28T13:15:25.933 回答
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;
}
于 2012-02-28T13:38:35.400 回答
3
丑陋的单线
这个丑陋的单线会做(并ArrayList<Object>
在问题的情况下返回 a ):
Collections.list(Collections.enumeration(lhMap.values())).subList(0, 100)
这也适用于 a HashMap
,但是HashMap
得到 aHashSet
的支持并不能保证您将获得输入的前 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);
}
于 2012-02-28T19:47:33.490 回答
-1
您可以使用计数器。当您的计数器达到 100 时,您的 foreach 循环将退出。
于 2012-02-28T13:11:54.080 回答
-2
编写一个循环使用Iterator.next()
100 次,然后停止。
我要说一些关于NavigableMap
和的东西SortedMap
——但是它们的接口是根据键定义的,而不是索引。但是它们可能仍然有用,这取决于您的实际潜在问题是什么。
于 2012-02-28T13:12:05.950 回答