首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表转换为Groovy中的映射

将列表转换为Groovy中的映射
EN

Stack Overflow用户
提问于 2022-04-04 21:51:23
回答 1查看 80关注 0票数 0

我试图转换一个字符串列表:

代码语言:javascript
复制
def description = """user:some.mail@gmail.com;groups:Team-1, Team-2
user:some.othermail@gmail.com;groups:Team-2, Team-3
user:another.mail@gmail.com;groups:Team-1, Team-3
some other text"""

description = description.split('\\r\\n|\\n|\\r').findAll { it.startsWith('user') }

变成了一张地图,看起来是这样的:

代码语言:javascript
复制
[some.mail@gmail.com: "Team-2, Team-3", some.othermail@gmail.com: "Team-2, Team-3", another.mail@gmail.com: "Team-1, Team-3"]

所以我可以迭代得到一个电子邮件地址和相应的团队。

遗憾的是,使用下面的代码,我只能部分地实现它,而且只能实现列表中的一项。我被困在一个循环中,得到了完整的结果。

代码语言:javascript
复制
def userData = [:]
userData = description[0].split(';').inject([:]) { map, token ->
    token.split(':').with {
        map[it[0].trim()] = it[1].trim()
    }
    map
}

你能给我一个提示吗?我怎样才能从清单上得到一张包含所有物品的地图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 05:32:24

您可以在列表上使用collectEntries方法:

代码语言:javascript
复制
def description = """user:some.mail@gmail.com;groups:Team-1, Team-2
user:some.othermail@gmail.com;groups:Team-2, Team-3
user:another.mail@gmail.com;groups:Team-1, Team-3
some other text"""

description = description.split('\\r\\n|\\n|\\r').findAll { it.startsWith('user') }

def map = description.collectEntries {
    // split "user:some.mail@gmail.com;groups:Team-1, Team-2"
    def split = it.split(';')
    // remove "user:" prefix
    def email = split[0].split(':')[1]
    // remove "groups:" prefix
    def groups = split[1].split(':')[1]
    // create a map entry
    [(email), groups]
}

然后运行map.forEach {k, v -> println "key: '${k}', value: '${v}'"}打印如下:(在本例中,标准映射到字符串可能有点混乱)

代码语言:javascript
复制
key: 'some.mail@gmail.com', value: 'Team-1, Team-2'
key: 'some.othermail@gmail.com', value: 'Team-2, Team-3'
key: 'another.mail@gmail.com', value: 'Team-1, Team-3'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71744137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档