Có cách nào tốt hơn để viết séc rỗng và séc không rỗng, trong groovy không?


101

Tôi cần thực hiện kiểm tra null / rỗng trên một số mã, trước khi thực hiện một số logic. Tôi có mục dưới đây, vì tôi cảm thấy !members?.emptykhông đúng.

Có cách nào kỳ lạ hơn để viết những điều sau không?

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

Câu trả lời:


209

Thực sự có một cách Groovier.

if(members){
    //Some work
}

làm mọi thứ nếu memberslà một bộ sưu tập. Kiểm tra rỗng cũng như kiểm tra rỗng (Các bộ sưu tập rỗng bị ép buộc false). Sự thật Hail Groovy . :)


3
Một "groovier" cách hơn là ví dụ nếu bạn đang quan tâm trong thời đại tối đa ra khỏi thành viên sau đó bạn có thể viết như sau: các thành viên .age.max ()
BTakacs

9
Lưu ý: members?.age.max()thổi phồng lên với "Không thể gọi phương thức max () trên đối tượng null" khi các thành viên là null. Bạn sẽ cầnmembers?.age?.max()
GreenGiant

@VinodJayachandran Có
dmahapatro

2
no: giải pháp GreenGiant là tốt nhất: kiểm tra List members = null;List members = [ [age: 12], [age: 24], [age: null], null ]chống lại cả hai giải pháp
BTakacs

2
Đây là loại kiểm tra đang làm việc cho hầu hết các trường hợp, nhưng nếu mục đích của bạn là để kiểm tra xem một biến là null sau đó bạn có thể kết thúc với một trường hợp cạnh nơi biến là không null nhưng một sai boolean
NikosDim

0
!members.find()

Tôi nghĩ bây giờ cách tốt nhất để giải quyết vấn đề này là mã ở trên. Nó hoạt động kể từ Groovy 1.8.1 http://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find () . Ví dụ:

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
bộ sưu tập có 1 phần tử null không trống, vì vậy đề xuất của bạn là sai
Yura

1
Điều gì sẽ xảy ra nếu bộ sưu tập là rỗng?
Dan Markhasin,

1
def lst6 = null; ! assert lst6.find () đó là đúng - không có lỗi xảy ra
Zhurov Konstantin

0

FYI loại mã này hoạt động (bạn có thể thấy nó xấu, đó là quyền của bạn :)):

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

Nói cách khác, mã này có các kiểm tra rỗng / rỗng đều vô dụng:

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

def doAnotherThing(def member) {
  // Some work
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.