迭代从地图

时间:2017-03-01 16:01:30

标签: java list dictionary iteration

我使用这样的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()”会获得列表的大小吗?在这种情况下,如何从列表中获取某个项目?可能有更好的解决方案吗?

祝你好运

2 个答案:

答案 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>