讓代碼首先發言獲取列表的第一個元素慣用Groovy中
def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)
是否有一個更優雅的或慣用的方式來獲取列表的第一個元素或null如果這是不可能的? (我不會在這裏考慮一個try-catch塊)。
讓代碼首先發言獲取列表的第一個元素慣用Groovy中
def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)
是否有一個更優雅的或慣用的方式來獲取列表的第一個元素或null如果這是不可能的? (我不會在這裏考慮一個try-catch塊)。
不確定使用find是最優雅還是慣用的,但它很簡潔並且不會拋出IndexOutOfBoundsException。
def foo
foo = ['bar', 'baz']
assert "bar" == foo?.find { true }
foo = []
assert null == foo?.find { true }
foo = null
assert null == foo?.find { true }
+1這個技巧。我可以使它更簡潔:`foo?.find {it}` – 2011-02-09 11:50:26
Adam,[0] .find {it}返回null – tixxit 2011-11-21 19:02:54
你也可以做
foo[0]
,這將拋出一個NullPointerException當foo是空的,但它會返回一個空的列表上的空值,不像foo.first()
將扔在空異常。
由於Groovy 1.8.1我們可以使用方法take()和drop()。通過take()方法,我們從列表開始獲得項目。我們將我們想要的項目的數量作爲參數傳遞給方法。
要從列表開始處移除項目,我們可以使用drop()方法。將項目數量作爲參數傳遞給方法。
請注意,原始列表未更改,take()/ drop()方法的結果是一個新列表。
def a = [1,2,3,4]
println(a.drop(2))
println(a.take(2))
println(a.take(0))
println(a)
*******************
Output:
[3, 4]
[1, 2]
[]
[1, 2, 3, 4]
#listBars返回什麼?如果您嘗試獲取列表中不存在的元素,Groovy不應該拋出。 `assert l.getAt(0)== null` `assert l instanceof ArrayList` – 2012-05-01 15:19:02