如何与groovy中的地图集合进行比较

问题描述 投票:0回答:1
def m = [
    [id: 7144, name: "Test załącznika.docx", group: "3#Gotowe do akceptacji"],
    [id: 7145, name: "Test załącznika 2.docx", group: "3#Gotowe do akceptacji"],
    [id: 7146, name: "Test integracji dział prawny cd..docx", group: "3#Gotowe do akceptacji"],
    [id: 7147, name: "Test załącznika 3.docx", group: "3#Gotowe do akceptacji"],
    [id: 7153, name: "Z.8.DRWS.P.01.F.01.PL.01 Wykaz dokumentów związanych i załączników.docx", group: "3#Gotowe do akceptacji"]
]

def mj = [
    [id: 24930, name: "Test integracji dział prawny cd. nowy.docx"],
    [id: 24931, name: "Test załącznika nowy.docx"],
    [id: 24932, name: "Test załącznika 3 nowa.docx"],
    [id: 23432, name: "xoxoxoxx.docx"],
    [id: 24933, name: "Test załącznika 2 nowy.docx"]
]

m.each { webcFile ->
    def webcName = webcFile.name
    def webcGroup = webcFile.group

    def webcNameWithoutExtension = webcName.take(webcName.lastIndexOf('.'))

    mj.each { jiraFile ->
        def jiraName = jiraFile.name
        def jiraNameWithoutExtension = jiraName.take(jiraName.lastIndexOf('.'))
        if (jiraNameWithoutExtension.contains(webcNameWithoutExtension) && webcGroup == "3#Gotowe do akceptacji") {

        } else if (!jiraNameWithoutExtension.contains(webcNameWithoutExtension)) {

           println(jiraNameWithoutExtension)


    }
}
}

我必须比较两个地图集合,并打印第一个地图的值是否包含第二个地图的值。

if 语句工作正常,但 else if 不行。它应该只打印 xoxoxox 但打印

Test integracji dział prawny cd. nowy
xoxoxoxx
Test integracji dział prawny cd. nowy
Test załącznika nowy
Test załącznika 3 nowa
xoxoxoxx
Test załącznika nowy
Test załącznika 3 nowa
xoxoxoxx
Test załącznika 2 nowy
Test integracji dział prawny cd. nowy
Test załącznika nowy
xoxoxoxx
Test załącznika 2 nowy
Test integracji dział prawny cd. nowy
Test załącznika nowy
Test załącznika 3 nowa
xoxoxoxx
Test załącznika 2 nowy

从脚本的角度来看,一切都是正确的,但打印太多。你能帮我一点忙吗?

groovy grails collections maps
1个回答
0
投票

首先,我认为部分问题在于,所有文件名 来自

mj
都是后固定的
now[ya]
所以实际上没有 与您在此处使用的规则重复。

Next

each
不能(真的)短路,所以有两个嵌套
each
你将为一些无用的工作以及可能一些错误的输出付出代价 (假设您不应该打印可能的重复项)。

所以我建议首先查找一下您正在查找的内容(注意, 也许你想关心那里的

novw[ay]
情况 也)。

然后迭代列表,你想要找到其中的欺骗者。

def m = [
    [id: 7144, name: "Test załącznika.docx", group: "3#Gotowe do akceptacji"],
    [id: 7145, name: "Test załącznika 2.docx", group: "3#Gotowe do akceptacji"],
    [id: 7146, name: "Test integracji dział prawny cd..docx", group: "3#Gotowe do akceptacji"],
    [id: 7147, name: "Test załącznika 3.docx", group: "3#Gotowe do akceptacji"],
    [id: 7153, name: "Z.8.DRWS.P.01.F.01.PL.01 Wykaz dokumentów związanych i załączników.docx", group: "3#Gotowe do akceptacji"],
    [id: 7154, name: "xoxoxoxx.docx", group: "3#Gotowe do akceptacji"], // to at least one missing
]

def mj = [
    [id: 24930, name: "Test integracji dział prawny cd. nowy.docx"],
    [id: 24931, name: "Test załącznika nowy.docx"],
    [id: 24932, name: "Test załącznika 3 nowa.docx"],
    [id: 23432, name: "xoxoxoxx.docx"],
    [id: 24933, name: "Test załącznika 2 nowy.docx"]
]


def stripSuffix = { it.take(it.lastIndexOf('.')) }

// XXX: maybe add now[ay] handling here
def known = mj.stream().map{ stripSuffix it.name }.toSet()

m.each{
    def webcNameWithoutExtension = stripSuffix(it.name)
    if (!known.contains(webcNameWithoutExtension)) {
        println webcNameWithoutExtension
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.