Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Groovy列表和映射_List_Map_Groovy - Fatal编程技术网

List Groovy列表和映射

List Groovy列表和映射,list,map,groovy,List,Map,Groovy,我正在编写selenium测试的助手方法。其中之一是: private static List<DataRow> parseTable(WebElement table) { List<WebElement> tableHeaders = table.findElements(By.tagName("th")) List<DataRow> dataRow = table.findElements(By.xpath(".//tbody/t

我正在编写selenium测试的助手方法。其中之一是:

    private static List<DataRow> parseTable(WebElement table) {
    List<WebElement> tableHeaders = table.findElements(By.tagName("th"))
    List<DataRow> dataRow = table.findElements(By.xpath(".//tbody/tr")).collect {
        Map<String, String> columns = [:]
        it.findElements(By.tagName("td")).eachWithIndex { item, i ->
            columns[tableHeaders.get(i).text] = item.text
        }
        new DataRow(it, columns)
    }
    return dataRow
}

有没有更好的方法从两个列表生成地图?

您应该能够做到:

def columns = [tableHeaders,it.findElements(By.tagName("td"))].transpose().collectEntries()
作为解释:

鉴于:

def a = [ 'a', 'b', 'c' ]
def b = [ 1, 2, 3 ]
然后

以及:


如果
a
b
的基数相同?@dmahapatro是的,否则您将在地图中获得与两个列表中较小的元素相同的元素数。我假设这是一种情况,因为上面的示例的行为相同(如果
tableHeaders
更短,则会崩溃)。从
的角度考虑,这是有意义的。如果列的行中没有元素,则不会进行转置。相反,如果行没有列,则忽略该元素。例如:
assert[['a',b'],[1,2,3].[transpose()=[[a',1],[b',2].
assert[[a',b',c'],[1,2].[1,2].[transpose()=['a',1','b',2].
它也可以使用两个以上的维度,但当任何子列表用尽时,它就会停止,即:
assert[[1,2,3,4],'a','b'],'i','ii','iii].transpose][[1,'a','i'],[2,'b','ii']]
def a = [ 'a', 'b', 'c' ]
def b = [ 1, 2, 3 ]
def c = [ a, b ].transpose()
assert c == [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
def d = c.collectEntries()
assert d instanceof Map
assert d == [ a:1, b:2, c:3 ]