【发布时间】:2011-01-06 17:50:28
【问题描述】:
如果我有一个包含字符串和双精度的树形图。无论如何要从地图中检索前 10 个键?
【问题讨论】:
-
为什么不能在迭代器上调用 next() 十次?
-
成功了!非常感谢。
如果我有一个包含字符串和双精度的树形图。无论如何要从地图中检索前 10 个键?
【问题讨论】:
如果您想要键/值对,请通过treeMap.entrySet().iterator() 获取迭代器,如果您只关心键,请通过treeMap.keySet().iterator() 获取迭代器,然后调用iterator.next() 10 次或只要iterator.hasNext() 返回true。
List<Map.Entry<String, Double>> firstTen = new ArrayList<Map.Entry<String, Double>>(10);
Iterator<String, Double> iterator = treeMap.entrySet().iterator();
for (int i = 0; iterator.hasNext() && i < 10; i++) {
firstTen.add(iterator.next());
}
【讨论】:
JDK 中没有,但第三方库中有一些方法可以做到这一点。
例如 @987654321@ 来自 guava
【讨论】:
由于TreeMap 是NavigableMap,您应该查看该接口中的方法。没有什么可以让您选择第一个 n,但您可以选择所有键小于给定键的条目,等等。
否则,我将只使用 Iterator 并在 n 迭代后停止。
【讨论】:
将entrySet() 包装在一个列表中并创建一个subList():
SortedMap<String,Double> treeMap = new TreeMap<String, Double>();
List<Entry<String, Double>> firstTen =
new ArrayList<Map.Entry<String,Double>>(treeMap.entrySet())
.subList(0, 10);
for(Entry<String, Double> entry : firstTen){
// do something with entries
}
缺点:整个地图会被复制到列表中。
【讨论】:
它与 dkarp 和 sean 提供的代码 sn-ps 一起工作。但是,它也适用于 DJClayworth 的建议。以下是我的解决方法:
c=sorted_map.keySet();
Iterator itr=c.iterator();
String s="";
while (i<iteratesize&&itr.hasNext()){
s=(String) itr.next();
System.out.println(s);
s="";
i++;
}
非常感谢大家的帮助。我真的很感激。
【讨论】: