两个列表 - 追加和交换

时间:2017-03-23 12:47:42

标签: groovy

我有这个

def url = "http://myurl/".toURL().text
def root = new XmlSlurper().parseText(url)

def namn = root.data.'content-item'.'**'.findAll{ node-> node.name() == 'resourceURI' }*.text()
def mylist = []

namn.each{
mylist << it
}

println mylist

def namn2 = root.data.'content-item'.'**'.findAll{ node-> node.name() == 'relativePath' }*.text()
def mylist2 = []

namn2.each{
mylist2 << it
}

println mylist2

这将是这个的输出:

[http://myurl/, http://myurl/]

[/Sixten/1.1.0.235/, /Sixten/1.1.0.331/]

我知道要将其交换为

[Sixten-1.1.0.235.nupkg, Sixten-1.1.0.331.nupkg]

然后附加到第一个列表,这样就会产生这样的结果

[http://myurl/Sixten-1.1.0.235.nupkg, http://myurl/Sixten-1.1.0.331.nupkg]

怎么样?

2 个答案:

答案 0 :(得分:2)

您不需要执行each即可将值放入列表中......您已有列表:

def myList = root.data.'content-item'
                 .'**'
                 .findAll{ node-> node.name() == 'resourceURI' }
                *.text()

def myList2 = root.data.'content-item'
                  .'**'
                  .findAll{ node-> node.name() == 'relativePath' }
                 *.text()

然后,要操纵myList2,您只需要:

myList2 = myList2*.getAt(1..-2)*.replaceAll('/', '-')*.plus('.nupkg')

要将网址附加到开头只需要:

[myList,myList2].transpose().collect { a, b -> a + b }

答案 1 :(得分:1)

这个怎么样:

def myList = ['http://myurl/', 'http://myurl/']
def myList2 = ['/Sixten/1.1.0.235/', '/Sixten/1.1.0.331/']

myList2 = myList2.collect { list2Entry ->
    list2Entry[1..-2].replaceAll('/', '-') + '.nupkg'
}

def lst = []
myList.eachWithIndex{ txt, idx ->
    lst << txt + myList2[idx]
}

println lst

打印: [http://myurl/Sixten-1.1.0.235.nupkghttp://myurl/Sixten-1.1.0.331.nupkg]

首先,在收集器内部,通过使用[1 ..- 2]删除字符串的第一个和最后一个字符来删除前导和尾部斜杠。然后使用replaceAll替换为字符串中间的斜杠,并使用字符串连接添加.nupkg。

在eachWithIndex中,myList中的每个字符串都与myList2中相同位置的字符串连接,结果字符串被添加到新创建的列表lst。