我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单示例代码:
[1,2,3,4].grep({ it == 4 })
它返回包含元素 4 的数组,这正是我想要的。但是,当我在管道中执行类似的代码时,它返回一个布尔值,这不仅不是我想要的,它甚至不返回 true,当找到某些东西时,它总是 false。
pipeline {
agent {
label 'Cloud-Ubuntu-Slave'
}
options {
timestamps()
}
stages {
stage ('Debug') {
steps {
script {
echo "${[1,2,3,4].grep({ it == 4 })}"
}
}
}
}
我怀疑给定管道上下文,它执行名为 grep 的不同方法,而不是 Collection 中的方法,尽管代码相同,但我无法找出原因或如何更改它。
同样奇怪的是,我能够正确执行 Collection(例如 collect)中的大多数方法。
这显然只是我实际在做的一个简化示例。我真正想做的是基于返回 true 和 false 的 lambda 函数的集合过滤器。任何替代解决方案,不涉及仅迭代它并手动构建一个新数组,这已经是我目前非常丑陋的解决方法,同样受到欢迎。