宣言パイプライン内でjava.util.Collectionからgrepメソッドを使用しようとしていますが、別のシグネチャがあるようです。私は問題もなく、次の簡単な例のコードを実行できるスクリプトコンソールで:Jenkinsパイプラインコレクションメソッドgrep
[1,2,3,4].grep({ it == 4 })
それは私が欲しいものである要素4を含む配列を返します。パイプライン内で同様のコードを実行すると、ブール値が返されます。ブール値は返されません。何も見つからない場合はtrueを返します。
pipeline {
agent {
label 'Cloud-Ubuntu-Slave'
}
options {
timestamps()
}
stages {
stage ('Debug') {
steps {
script {
echo "${[1,2,3,4].grep({ it == 4 })}"
}
}
}
}
私はパイプラインの状況を考えると、それはコードが同じであるという事実にもかかわらず、かなりのコレクションからのものよりも、grepの名前の別のメソッドを実行することを疑うが、私は見つけることができませんでしたなぜ、どのようにこれを変更するか。
また、奇妙な点は、コレクション(コレクションなど)から大部分のメソッドを正しく実行できることです。
これは明らかに私が実際にやっていることの単純な例です。私が本当にやりたいことは、trueとfalseを返すラムダ関数に基づくコレクションのフィルタです。それを繰り返すだけではなく、手作業で新しい配列を作成する代わりのソリューションは、すでに私の現在の非常に醜い解決策でもありますが、これは大歓迎です。
代わりに '$ {[1,2,3,4] .findAll {it == 4}}'を試してみてください。この場合はgrepと同じようにしてください。それがあなたのために働くなら、私に言いなさい、私はあなたが受け入れる答えをあなたのコメントにします。 – Vampire
はい、実際にすべての作品を見つけます。 2つの違いが何であるかはわかりませんが、grepはより汎用性があり、オブジェクトや正規表現と比較することができますが、私はラムダメソッドだけを気にするので、findAllも同様です。ありがとう@ヴァンパイア。 –
'grep'は' isCase'メソッドを持つもので動作します。 'findAll'はClosuresでのみ動作します。しかし、Closure内の他のオブジェクトの 'isCase'メソッドを使うことができるので、' findAll'を使うことができます。 'grep'と同じくらい読みやすく、わずかです。おそらく 'grep'がまだ存在しないかなり古いGroovyバージョンかもしれません。 – Vampire