有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Groovy(或Java)中如何将字符串数组的所有索引包含到一行中

如果您有java的答案,那么它将非常相似,可以进行翻译。提前感谢您抽出时间

我试图获取数组中的所有字符串,并在一个docker行中调用它们以创建单个tar文件。对于如何创建tar文件,我并不感到困惑。它应该如下所示:

sh "docker save [image1]:tag [image2]:tag etc... > docker.tar"

我的问题是,我需要tar的图像以以下格式列出:

myMap = [
        "StringIndex0": ["keyword": "image0", "unrelatedKeyword": "sentence0"],
        "StringIndex1": ["keyword": "image1", "unrelatedKeyword": "sentence1"],
        "StringIndex2": ["keyword": "image2", "unrelatedKeyword": "sentence2"],
        ]

我无法执行如下的for循环:

for (index in myMap) {
    for (img in myMap[index]['keyword']){
         sh "docker save ${img}:tag > docker.tar"
    }
}

因为这将分别创建docker save [image1:tag] > docker.tardocker save [image2:tag] > docker.tar,它们将相互覆盖。我正在寻找一个解决方案,能够焦油所有的图像在一次

我不确定连接是否会起作用,因为它可能看起来不正确:

docker save image1 image2 imag3:tag > docker.tar

我希望得到一个能与数组中任意数量的StringIndex一起工作的答案,所以我不会像这样硬编码:

AllKeywords = ""
    for (index in myMap) {
       for (img in myMap[index]['keyword']) {
           AllKeywords += "${img}"
 
    }
}
sh "docker save AllKeywords[0]:tag AllKeywords[1]:tag > docker.tar"

因为基本上我可以这样做:

sh "docker save myMap[StringIndex0]['keyword']:tag myMap[StringIndex1]['keyword']:tag > docker.tar"

当它们被添加时,这将不再解释StringIndex

我是新来的,所以如果我的问题不清楚,请让我知道,我会尽力解决它


共 (2) 个答案

  1. # 1 楼答案

    假设你的地图实际上是一幅地图地图,这里有一个选项:

    String saveTargets = map.values().collect { "${it['keyword']}:tag" }.join(' ')
    
    sh "docker save $saveTargets > docker.tar"
    

    如果tag实际上是参数化的,只需将其替换为$tag

    (因为这是Groovy,所以有很多替代方案,但这应该能让你达到目的。)

  2. # 2 楼答案

    我不熟悉Groovy语法,但下面应该能很好地表达这个想法

    all = ""
    
    for (index in myMap) {
        for (img in myMap[index]['keyword']) {
             all += "${img}:tag "
             
        }
    }
    
    sh "docker save " + all + "> docker.tar"
    

    您的示例输出还有括号([]),[image1:tag] [image2:tag] ...,因此您可能需要添加这些括号