Jenkins 管道收集方法 grep

Jenkins Pipeline Collection method grep

我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎具有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单的示例代码:

[1,2,3,4].grep({ it == 4 })

它return是包含元素4的数组,这就是我想要的。然而,当我在管道内执行类似的代码时,它 return 是一个布尔值,这不仅不是我想要的,它甚至 return 都不是真的,当找到一些东西时,它总是假的。

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)。

这显然只是我实际操作的简化示例。我真正想做的是基于 lambda 函数 returning true 和 false 的集合过滤器。任何替代解决方案,不涉及仅遍历它并手动构建一个新数组,这已经是我当前非常丑陋的解决方法,同样受到欢迎。

请改用 ${[1,2,3,4].findAll { it == 4 }},在这种情况下它的作用与 grep 相同。