我试图只迭代我的Map中的第一个“n”值,是否有任何方法可用或我只需要使用count变量控制它。
下面是一个例子,我已经对一组属于同一城市的名字进行了排序。现在我只想要前10个城市和人名。
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
List<String> list = entry.getValue();
// Display list of people in City
}
是否有可以保存固定数量的键值对的Map实现? 请指点一下。
谢谢,
-Vijay Selvaraj
答案 0 :(得分:9)
如何在
中获取前10个键值对HashMap
HashMap
is unordered。这使得这个问题不合适(除非“首先”你的意思是“任意”)。
如果您想要一致的键排序,则需要将地图类型更改为SortedMap
,例如TreeMap
。
或者,如果它是你所追求的最古老的元素(即你先插入的元素),那么LinkedHashMap
就是答案。
至于实际获取第一个n
元素,带有计数器的循环是一种非常合理的方法。
答案 1 :(得分:3)
我试图只迭代我的Map中的第一个“n”值,是否有任何可用的方法,或者我只需要使用计数变量来控制它。
您只能使用标准集合API(它仍然比计数器变量IMO稍差)的最接近的事情如下:
List<Map.Entry<String, List<String>> entryList =
new ArrayList<Map.Entry<String, List<String>>(map.entrySet());
for (Map.Entry<String, List<String>> entry : entryList.subList(0, 10)) {
List<String> list = entry.getValue();
// Display list of people in City
}
使用Java 7中的精美钻石可以避免冗长的类型参数:
List<Map.Entry<String, List<String>> entryList = new ArrayList<>(map.entrySet());
或使用迭代键和.get
相应的值。
答案 2 :(得分:2)
List<List<string>> list = new ArrayList<List<String>>();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
if (list.size() > 9) break;
list.add(entry.getValue());
}