0

宣言パイプライン内で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を返すラムダ関数に基づくコレクションのフィルタです。それを繰り返すだけではなく、手作業で新しい配列を作成する代わりのソリューションは、すでに私の現在の非常に醜い解決策でもありますが、これは大歓迎です。

+0

代わりに '$ {[1,2,3,4] .findAll {it == 4}}'を試してみてください。この場合はgrepと同じようにしてください。それがあなたのために働くなら、私に言いなさい、私はあなたが受け入れる答えをあなたのコメントにします。 – Vampire

+0

はい、実際にすべての作品を見つけます。 2つの違いが何であるかはわかりませんが、grepはより汎用性があり、オブジェクトや正規表現と比較することができますが、私はラムダメソッドだけを気にするので、findAllも同様です。ありがとう@ヴァンパイア。 –

+0

'grep'は' isCase'メソッドを持つもので動作します。 'findAll'はClosuresでのみ動作します。しかし、Closure内の他のオブジェクトの 'isCase'メソッドを使うことができるので、' findAll'を使うことができます。 'grep'と同じくらい読みやすく、わずかです。おそらく 'grep'がまだ存在しないかなり古いGroovyバージョンかもしれません。 – Vampire

答えて

0

${[1,2,3,4].findAll { it == 4 }}を代わりに使用してください。この場合、grepと同じことを行います。