在我的HashMap < String,List< String,String>>中,我保存了keys(建筑物的名称)和values(来自该建筑物中设备的ID)。我只想从HashMap中的每个keys中获取值的大小,但我只能从第一个Key,Value对中获取值的大小。
Map<String, List<String>> moduleNamesWithAllParameters = new
HashMap<String, List<String>>();
List<String> parameters = new ArrayList<String>();
List<String> moduleNames = new ArrayList<String>();
Iterator it;
int start = 0, end = 0, mapKeys = 0;
parameters.add("kExmWoEM2HpMA4CT");
parameters.add("ILm1nApv06lDtqva");
parameters.add("gu00xoO5WPTv0SEr");
parameters.add("kX4FIg6c3C10msex");
parameters.add("xUcA4Y5rvqxlg8ju");
parameters.add("TYjydK6AyY7vwYSo");
parameters.add("#");
parameters.add("IDvHK1vXMiDEPxad");
parameters.add("ja0D3LH8ML0mQwZ0");
parameters.add("#");
parameters.add("tKgYRVvguvl3ByRc");
parameters.add("I95sFdAOoUTHjO7Y");
moduleNames.add("Building 1");
moduleNames.add("Building 2");
moduleNames.add("Building 3");
it = parameters.iterator();
for (int i = 0; i < moduleNames.size(); i++) {
do {
end++;
} while (it.hasNext() && !(it.next().equals("#")));
moduleNamesWithAllParameters.put(moduleNames.get(i), parameters.subList(start, end - 1));
start = end;
}
for (String key : moduleNamesWithAllParameters.keySet())
System.out.println(key + " = " + moduleNamesWithAllParameters.get(key));
Entry<String, List<String>> entry;
for (int i = 0; i < moduleNames.size(); i++) {
entry = moduleNamesWithAllParameters.entrySet().iterator().next();
mapKeys = entry.getValue().size();
System.out.println(mapKeys);
}
}
字符串
5条答案
按热度按时间6vl6ewon1#
除了上面提到的所有答案之外,如果你想得到Map上所有值的总和,那么你可以这样做:
字符串
irtuqstp2#
这一行:
字符串
不断地在map的条目集上创建一个新的迭代器,并返回第一个条目。所以你只能看到第一个条目。
你可以改变循环来遍历所有条目,像这样:
型
pdkcd3nj3#
假设您使用的是Java8或更高版本:
字符串
qf9go6mv4#
将最后一个循环替换为以下内容:
字符串
或者更整洁一点:
型
或者更简洁(Java 8+):
型
或者使用
valueSet
循环(因为你实际上没有使用键):型
或者如果你很喜欢(Java 8+):
型
kd3sttzy5#
问题发生在这一行:
第一个月
entrySet().iterator()
在每次循环时都是一个新对象。所以你的Map尺寸只是第一个尺寸。