假设我有一个包含216个条目的LinkedHashMap,我如何从LinkedHashMap< Integer,Object>获取前100个值(此处为Object类型).
解决方法:
丑陋的单线
这个丑陋的单线程会做(并在问题的情况下返回一个ArrayList< Object>):
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);
}