Gibt es eine bessere Möglichkeit, diesen Null-Check und einen nicht leeren Check in Groovy zu schreiben?

100

Ich muss eine Null / Leer- Prüfung für einen Code durchführen, bevor ich eine Logik durchführe. Ich habe Artikel unten, weil ich der Meinung bin, dass er !members?.emptynicht korrekt ist.

Gibt es eine bessere Möglichkeit, Folgendes zu schreiben?

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

Antworten:

208

Es gibt in der Tat einen Groovier Way.

if(members){
    //Some work
}

macht alles wenn memberses eine Sammlung ist. Nullprüfung sowie leere Prüfung (Leere Sammlungen werden erzwungen false). Gegrüßet seist du der groovigen Wahrheit . :) :)

dmahapatro
quelle
2
Ein "groovigerer" Weg ist, dass Sie zum Beispiel, wenn Sie sich für das maximale Alter der Mitglieder interessieren, Folgendes schreiben können: Mitglieder? .Mage.max ()
BTakacs
8
Hinweis: members?.age.max()Wird mit "Methode max () für Nullobjekt kann nicht aufgerufen werden" angezeigt, wenn Mitglieder null sind. Sie würden brauchenmembers?.age?.max()
GreenGiant
@ VinodJayachandran Ja
dmahapatro
2
Nein: Die Lösung von GreenGiant ist die beste: Überprüfen Sie List members = null;und List members = [ [age: 12], [age: 24], [age: null], null ]gegen beide Lösungen
BTakacs
2
Diese Art der Überprüfung funktioniert in den meisten Fällen, aber wenn Sie überprüfen
möchten
0
!members.find()

Ich denke, der beste Weg, um dieses Problem zu lösen, ist der obige Code. Es funktioniert seit Groovy 1.8.1 http://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find () . Beispiele:

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()
Zhurov Konstantin
quelle
1
Die Sammlung mit 1 Null-Element ist nicht leer, daher ist Ihr Vorschlag falsch
Yura
1
Was ist, wenn die Sammlung null ist?
Dan Markhasin
1
def lst6 = null; behaupten! lst6.find () es ist richtig - es tritt kein Fehler auf
Zhurov Konstantin
0

Zu Ihrer Information, diese Art von Code funktioniert (Sie können ihn hässlich finden, es ist Ihr Recht :)):

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

Mit anderen Worten, dieser Code hat null / leere Prüfungen, die beide nutzlos sind:

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

def doAnotherThing(def member) {
  // Some work
}
Max
quelle