このnullチェックと空でないチェックをgroovyで書くためのより良い方法はありますか?


101

ロジックを実行する前に、一部のコードでnull /空のチェックを実行する必要があります。気分!members?.emptyが悪いので以下の商品を持っています。

次のように書くよりかっこいい方法はありますか?

if (members && !members.empty) {
    // Some Work
}

回答:


209

確かにGroovier Wayがあります。

if(members){
    //Some work
}

membersコレクションの場合はすべてを行います。ヌルチェックおよび空のチェック(空のコレクションはに強制されますfalse)。あられグルービートゥルース。:)


3
より「グルーヴィー」な方法は、たとえば、メンバーの最大年齢に興味がある場合は、次のように書くことができます:members?.age.max()
BTakacs

9
注:members?.age.max()メンバーがnullの場合、「nullオブジェクトでメソッドmax()を呼び出せません」で爆破します。あなたは必要になるでしょうmembers?.age?.max()
GreenGiant 2014

@VinodJayachandranはい
dmahapatro

2
いいえ:チェック:ジョリーグリーンジャイアントのソリューションが最善であるList members = null;List members = [ [age: 12], [age: 24], [age: null], null ]ソリューションの両方に対して
BTakacs

2
このタイプのチェックはほとんどの場合に機能しますが、変数がnullかどうかをチェックすることが目的である場合、変数がnullではなくブール値のfalseのケースになる可能性があります
NikosDim

0
!members.find()

この問題を解決する最善の方法は、上記のコードだと思います。Groovy 1.8.1以降のhttp://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find()から機能します。例:

def lst1 = []
assert !lst1.find()

def lst2 = [null]
assert !lst2.find()

def lst3 = [null,2,null]
assert lst3.find()

def lst4 = [null,null,null]
assert !lst4.find()

def lst5 = [null, 0, 0.0, false, '', [], 42, 43]
assert lst5.find() == 42

def lst6 = null; 
assert !lst6.find()

1
null要素が1つあるコレクションは空ではないため、提案は間違っています
Yura

1
コレクションがnullの場合はどうなりますか?
Dan Markhasin

1
def lst6 = null; アサート!lst6.find()正しい-エラーは発生しない
Zhurov Konstantin

0

ちなみに、この種のコードは機能します(見苦しいかもしれませんが、それはあなたの権利です:)):

def list = null
list.each { println it }
soSomething()

言い換えると、このコードにはnull /空のチェックが両方とも役に立たない:

if (members && !members.empty) {
    members.each { doAnotherThing it }
}

def doAnotherThing(def member) {
  // Some work
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.