Получить первый элемент списка идиоматически в Groovy
Пусть говорят первый код
def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)
есть ли более элегантный или идиоматический способ получить первый элемент списка или null, если это невозможно? (Я бы не счел блок try-catch элегантным здесь.)
3 ответов
Не уверен, что использование 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]
это вызовет исключение NullPointerException, когда foo равно null, но он вернет значение null в пустом списке, в отличие от 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]