Groovy 是否有函数式编程方法来检索集合的第一个元素?

Groovy 是否有函数式编程方法来检索集合的第一个元素?,groovy,Groovy,列表可以为空。我想: def value = ""; def list = getList() if (!list.isEmpty()){ value = list.first().foo } 例如,我发现: assert ( [].find()?.foo?:"empty" ) == "empty" assert ([[foo:"notEmpty1"], [foo:"notEmpty2"]].find()?.foo?:"empty") == "notEmpty1" 有更好的办法吗 谢

列表可以为空。我想:

def value = "";
def list = getList()
if (!list.isEmpty()){
   value = list.first().foo 
}
例如,我发现:

assert ( [].find()?.foo?:"empty" ) == "empty"
assert ([[foo:"notEmpty1"], [foo:"notEmpty2"]].find()?.foo?:"empty") == "notEmpty1"
有更好的办法吗

谢谢!:)

编辑:

通过使用
[0]

assert ( [][0]?.foo?:"empty" ) == "empty"
assert ([[foo:"notEmpty1"], [foo:"notEmpty2"]][0]?.foo?:"empty") == "notEmpty1"

如果是
列表
,请尝试

if (!list?.isEmpty()){
    list.get(0);
}
如果列表元素不能为空,则不需要

如果它是一个集合,则有多个表单可以检索它。看看这篇文章


我从推特上得到了答案。声明:

def value = "";
def list = getList()
if (!list.isEmpty()){
   value = list.first().foo 
}
可以写:

def value = list[0]?.foo?:""

如果列表可以包含空值,则可以使用
find
,为什么不
list?。get(0)
list不为空,但可以为空。所以
list?.get(0)
将抛出一个IndexOutofBoundsException如果它不是
list
而是
Collection
读这篇文章,我同意我可以使用像guava这样的外部库,但我正在寻找一个100%groovy解决方案。在同一篇文章中,你有它。由于groovy可以使用java库,所以java解决方案就是groovy解决方案。100%