在 Groovy 中使用 CollectEntries 创建地图

SSF*_*SSF 1 groovy

我有以下列表: appList = [DevOpsApplication, 01.01.01]

我想使用创建地图collectEntries。我知道it指的是迭代的当前元素( 的快捷方式{ it -> it })。因此,我尝试使用索引:

def appMap = appList.collectEntries { [(it[0]):it[1]] }  
Run Code Online (Sandbox Code Playgroud)

然而,这给了我:

[D:e, 0:1]
Run Code Online (Sandbox Code Playgroud)

但我想要[DevOpsApplication: 01.01.01]。有没有办法做到这一点?

此外,将来我希望将其扩展到 2 个以上元素(例如[DevOpsApplication, 01.01.01, AnotherDevOpsApplication, 02.02.02]),并获得所需的输出[DevOpsApplication: 01.01.01, AnotherDevOpsApplication: 02.02.02]。这怎么可能呢?

cfr*_*ick 5

执行此操作的一个非常简短的版本是:

def appList = ["DevOpsApplication", "01.01.01"]
def appMap = [appList].collectEntries() // XXX
assert appMap == [DevOpsApplication: "01.01.01"]
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:该函数collectEntries预计返回一个映射或两个元素列表。你的appList已经是这样了。所以把它放在另一个列表中,调用collectEntries它。当没有给出函数时,collectEntries它使用恒等函数。

奖励:如果appList有更多元素怎么办?您可以使用collate它来构建元组。

def appList = ["DevOpsApplication", "01.01.01", "Some", "More"]
def appMap = appList.collate(2).collectEntries() // XXX
assert appMap == [DevOpsApplication: "01.01.01", Some: "More"]
Run Code Online (Sandbox Code Playgroud)