我想將非空項目添加到列表。所以我這樣做:如何向Groovy中的列表添加非空項目
List<Foo> foos = []
Foo foo = makeFoo()
if (foo)
foos << foo
但有沒有辦法做到這一點在一個單一的操作(沒有使用findAll創建列表後)。像:
foos.addNonNull(makeFoo())
我想將非空項目添加到列表。所以我這樣做:如何向Groovy中的列表添加非空項目
List<Foo> foos = []
Foo foo = makeFoo()
if (foo)
foos << foo
但有沒有辦法做到這一點在一個單一的操作(沒有使用findAll創建列表後)。像:
foos.addNonNull(makeFoo())
另一種替代方法是使用短路表達式:
foo && foos << foo
foo
的變量必須爲真爲待評估的第二部分。在其他一些語言中這是一種常見的做法,但由於可讀性和約定的原因,我會猶豫在groovy中廣泛使用它。
再次,這可能會跳過你想添加的空值/零值,因爲時髦的事實 –
好點。 'foo!= null && foos << foo',如果你想在你的列表中有錯誤的值。 – ataylor
關於可讀性,'foo && foos << foo'也不比'if(foo)foos << foo'更短,這更清晰。 –
不,你需要使用一個if
,或者自己寫addNonNull
方法(這只是使用一個if
)
另外:
if(foo) {
可能是不足夠,因爲這將跳過空字符串,或者如果它返回整數0
您需要
if(foo != null) {
答案是肯定的!我們可以擺脫分配變量
Foo foo = makeFoo()//we can ditch this
答案是否定的,我們不能擺脫這種情況。但我們可以使它更緊湊。
這裏的訣竅如何
List<Foo> foos = []
foos += (makeFoo()?:[]);
是不同的作品基於什麼是左,什麼是對的「+」右Groovy的「+」操作符。它恰好如此,如果左邊是一個列表,右邊是一個空列表,那麼沒有任何東西會被添加到左邊的列表中。
優點它是快速打字和緊湊。
缺點它是不是立即明顯發生了什麼事情發生在大多數人 而我們用一個額外的操作取代了變量賦值。 Groovy 會嘗試做一些事情來列出foos無論如何,它恰好在第二種情況下,該操作的結果給了我們一個理想的結果。
應該有....似乎很傻,你需要存儲foo來做你的支票。 – Snekse