0

我正在尝试在声明性管道中使用 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 函数的集合过滤器。任何替代解决方案,不涉及仅迭代它并手动构建一个新数组,这已经是我目前非常丑陋的解决方法,同样受到欢迎。

4

1 回答 1

0

改用${[1,2,3,4].findAll { it == 4 }}它,它的作用与grep本例相同。

于 2017-08-16T08:07:58.773 回答