コードが最初に話すようにしましょう
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 }
あなたもできる
_foo[0]
_
これは、fooがnullの場合にNullPointerExceptionをスローしますが、空で例外をスローするfoo.first()
とは異なり、空のリストではnull値を返します。
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]