在groovy中的对象集合中查找具有属性值的对象

gajydyqb  于 2023-10-15  发布在  其他
关注(0)|答案(3)|浏览(178)

我有一个ProjectComponent类型的集合,我使用下面的代码在集合中查找具有特定名称的对象。代码如下:

if(newIssueproject.getComponents().stream().anyMatch { it.getName().equals(shortenedComponentName)  }){
                        newComponent=it
   }

我收到错误脚本函数在Jira自动化规则上失败:UpdateExecutionSummary,文件:SuperFeature/rest_superconfigureGenerator.groovy,错误:groovy.lang.MissingPropertyException:无此类属性:对于class:SuperFeature.rest_superEncodureGenerator
但我已经查找了教程,它应该自动工作,即使它没有声明,正如你在这里看到的:

olqngx59

olqngx591#

我认为第一次使用it应该可以正常工作。这可能很好:

newIssueproject.getComponents().stream().anyMatch { 
   it.getName().equals(shortenedComponentName)  
})

第二个没有定义。

if(newIssueproject.getComponents().stream().anyMatch { it.getName().equals(shortenedComponentName)  }){
    newComponent=it   // it's me.  I'm the problem it's me.
}

如果你想抓住你想要的组件,我可以这样做:

newIssueProject.components.stream()
    .findFirst { it.name == shortedComponentName }
    .ifPresent { component ->
       // do something with it
    }
5kgi1eie

5kgi1eie2#

问题出在这一行:newComponent=it。您在作用域中使用了it,但它没有定义。it变量仅在anyMatch {...}闭包中“可见”。你需要做的是,首先,找到元素,然后赋值。以下是草稿(使用Java流):

def found = newIssueproject.getComponents().stream().filter { it.getName().equals(shortenedComponentName) }.findAny()
newComponent = found.orElseGet(null)

不过,我还是推荐使用Groovy语法:

def found = newIssueproject.getComponents().find { it.getName() == shortenedComponentName) }
if (found) {
    newComponent = found
}

我希望这会有所帮助。

yyyllmsg

yyyllmsg3#

def found = newList.any { it.getName().equals(shortenedComponentName)}
                    log.warn("MOUNA CAMELIA found--"+found+"--")

                    if(found ){
                        newComponent=projectComponentManager.findByComponentName(newIssueproject.getId(), shortenedComponentName)
                    }

相关问题