web-dev-qa-db-ja.com

Groovyで慣用的にリストの最初の要素を取得する

コードが最初に話すようにしましょう

def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)

リストの最初の要素を取得するためのよりエレガントまたは慣用的な方法はありますか、それが不可能な場合はnullですか? (ここでは、try-catchブロックをエレガントとは見なしません。)

31
Adam Schmideg

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 }
56

あなたもできる

_foo[0]
_

これは、fooがnullの場合にNullPointerExceptionをスローしますが、空で例外をスローするfoo.first()とは異なり、空のリストではnull値を返します。

16
James McMahon

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]
2
Here_2_learn