2013-04-02 48 views
3

我想將非空項目添加到列表。所以我這樣做:如何向Groovy中的列表添加非空項目

List<Foo> foos = [] 
Foo foo = makeFoo() 
if (foo) 
    foos << foo 

但有沒有辦法做到這一點在一個單一的操作(沒有使用findAll創建列表後)。像:

foos.addNonNull(makeFoo()) 
+0

應該有....似乎很傻,你需要存儲foo來做你的支票。 – Snekse

回答

9

另一種替代方法是使用短路表達式:

foo && foos << foo 

foo的變量必須爲真爲待評估的第二部分。在其他一些語言中這是一種常見的做法,但由於可讀性和約定的原因,我會猶豫在groovy中廣泛使用它。

+2

再次,這可能會跳過你想添加的空值/零值,因爲時髦的事實 –

+1

好點。 'foo!= null && foos << foo',如果你想在你的列表中有錯誤的值。 – ataylor

+0

關於可讀性,'foo && foos << foo'也不比'if(foo)foos << foo'更短,這更清晰。 –

5

不,你需要使用一個if,或者自己寫addNonNull方法(這只是使用一個if

另外:

if(foo) { 

可能是不足夠,因爲這將跳過空字符串,或者如果它返回整數0

您需要

if(foo != null) { 
3

答案是肯定的!我們可以擺脫分配變量

Foo foo = makeFoo()//we can ditch this 

答案是否定的,我們不能擺脫這種情況。但我們可以使它更緊湊。

這裏的訣竅如何

List<Foo> foos = [] 
foos += (makeFoo()?:[]); 

是不同的作品基於什麼是左,什麼是對的「+」右Groovy的「+」操作符。它恰好如此,如果左邊是一個列表,右邊是一個空列表,那麼沒有任何東西會被添加到左邊的列表中。

優點它是快速打字和緊湊。

缺點它是不是立即明顯發生了什麼事情發生在大多數人 而我們用一個額外的操作取代了變量賦值。 Groovy 會嘗試做一些事情來列出foos無論如何,它恰好在第二種情況下,該操作的結果給了我們一個理想的結果。

相關問題