我使用这样的Java代码相对缺乏经验。为了在我的Selenium自动化中取得进展,我想迭代一下Map>。
现在我尝试使用以下代码接近该迭代:
static Map<String, List<WebElement>> map = new Map<String, List<WebElement>>;
for (Map.Entry<String, List<WebElement>> entry : map.entrySet()) {
for (int i = 0; i < entry.getValue().size(); i++) {
*need to find code*
}
}
我的目的是遍历 map
中一个键的值内的所有Web元素在这种情况下,“entry.getValue()。size()”会获得列表的大小吗?在这种情况下,如何从列表中获取某个项目?可能有更好的解决方案吗?
祝你好运
答案 0 :(得分:0)
您可以访问每个地图条目中的键和值,并执行您需要的任何操作。在这种情况下,键是一个字符串,其值为List<WebElement>
。掌握清单后,您可以访问其大小并对其进行迭代。
for (Map.Entry<String, List<WebElement>> entry : map.entrySet()) {
String key = entry.getKey();
List<WebElement> list = entry.getValue();
// to iterate over the list, you can try
for (int i=0; i < list.size(); ++i) {
WebElement we = list.get(i);
// do something with this web element
}
}
答案 1 :(得分:0)
我的目的是遍历地图中一个键值的所有Web元素
这应该很容易:
for( WebElement element : map.get(key) ) {
//do whatever is appropriate
}
上述问题存在一个问题:如果get(key)
返回null
(要么未映射关键字,要么地图包含值为null
的关键字NullPointerException
key)你得到一个null
。要解决这个问题,可以先获取地图,检查一下是否没有List<WebElement> list = map.get(key);
if( list != null ) {
for( WebElement element : list ) {
//do whatever is appropriate
}
}
,然后重复:
get()
您可能还想看看Guava的ListMultimap
,它总是会在entry.getValue()
上返回一个集合/列表,并使列表值处理地图变得更加容易。
将&#34; entry.getValue()。size()&#34;在这种情况下得到列表的大小?
是的,因为List
应返回null
,除非您为给定的密钥映射List
。由于您获得了size()
,因此对index >= 0 && index < list.size()
的通话将返回列表的大小。
在这种情况下,如何从列表中获取某个项目?
如果您知道该元素的索引,只需检查列表是否实际包含该索引,即是否list.get(index)
。然后只需使用LinkedList
。
如果你不知道索引,你需要遍历列表并检查每个元素,直到你到达终点或找到你需要的元素。或者,如果您可以按要检查的属性对列表进行排序,则还可以使用二进制搜索来定位元素(如果存在)。
请注意,get(index)
{{1}}具有线性成本,因此不适合通过索引或二进制搜索获取,至少在列表包含许多元素时不是这样。< / p>