Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是Groovy collect闭包的缩写吗?_Java_List_Groovy_Collect - Fatal编程技术网

Java 这是Groovy collect闭包的缩写吗?

Java 这是Groovy collect闭包的缩写吗?,java,list,groovy,collect,Java,List,Groovy,Collect,我研究了处理JSON解析的Groovy代码,发现以下奇怪的代码我无法理解: list.groovy def lst = [ [name: 'Bill', age: 30], [name: 'Jobs', age: 40], [name: 'Steve', age: 50], ] println lst println lst.name println lst.collect{it.name} println lst.age println lst.agenda 平台

我研究了处理JSON解析的Groovy代码,发现以下奇怪的代码我无法理解:

list.groovy

def lst = [
    [name: 'Bill', age: 30],
    [name: 'Jobs', age: 40],
    [name: 'Steve', age: 50],
]

println lst
println lst.name
println lst.collect{it.name}
println lst.age
println lst.agenda

平台:Windows10,Groovy版本:2.5.9

C:\chenchang\study\groovy_study\closure>groovy -version
Groovy Version: 2.5.9 JVM: 1.8.0_272 Vendor: AdoptOpenJDK OS: Windows 10
Groovy脚本的输出:

C:\chenchang\study\groovy_study\closure>groovy list.groovy
[[name:Bill, age:30], [name:Jobs, age:40], [name:Steve, age:50]]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve]
[30, 40, 50]
[null, null, null]
C:\chenchang\study\groovy_study\closure>groovy list.groovy
[[name:Bill, age:30], [name:Jobs, age:40], [name:Steve, age:50], null]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve, null]
[Bill, Jobs, Steve, null]
我无法理解
lst.name
部分。它看起来像
lst.collect{It.name}
,但我找不到任何参考文档或正式解释。有人能解释一下Groovy语法是什么吗


在审阅了您的评论之后,我更新了示例代码,发现了一些以前不知道的新知识

def lst = [
    [name: 'Bill', age: 30],
    [name: 'Jobs', age: 40],
    [name: 'Steve', age: 50],
    null, // I add a null value in the list
]
println lst
println lst.name
println lst.findAll{ it != null }.collect{ it.name }
println lst*.name
/* println lst.collect{ it.name } */
/* java.lang.NullPointerException: Cannot get property 'name' on null object */
println lst.collect{ it?.name }
修改后的Groovy脚本的输出:

C:\chenchang\study\groovy_study\closure>groovy list.groovy
[[name:Bill, age:30], [name:Jobs, age:40], [name:Steve, age:50]]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve]
[30, 40, 50]
[null, null, null]
C:\chenchang\study\groovy_study\closure>groovy list.groovy
[[name:Bill, age:30], [name:Jobs, age:40], [name:Steve, age:50], null]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve, null]
[Bill, Jobs, Steve, null]
lst.name
是忽略空值的。因此,如果原始列表包含空值,则返回的新列表的长度将小于原始列表的长度
lst.name
相当于
lst.findAll{it!=null}.collect{it.name}

lst*.name
扩展点运算符
或。返回的新列表的长度等于原始列表的长度。如果原始列表中的某些值为
null
,则新列表中的相应值将为null,并且不会引发任何
NullPointerException
lst*.name
相当于
lst.collect{it?.name}

它是集合的符号

GPath可用于处理XML、JSON和集合等数据。

它是集合的符号


GPath可用于处理XML、JSON和集合等数据。

def lst=[]
是一种

您可以使用
println lst.getClass()
来检查它

ArrayList
实现
Iterable
集合
。。。和其他接口

groovy可以在任何级别的超级接口或超级类上添加功能

解释groovy添加到java中的其他功能

要获得groovy中所有可用方法的列表,您必须检查java文档和groovy文档的所有超类/接口

lst.name
groovy实际调用
lst.getAt('name')

getAt(字符串键)-可以在groovy文档中找到


最后,这里是一个关于groovy集合的文档:

def lst=[]
是一个

您可以使用
println lst.getClass()
来检查它

ArrayList
实现
Iterable
集合
。。。和其他接口

groovy可以在任何级别的超级接口或超级类上添加功能

解释groovy添加到java中的其他功能

要获得groovy中所有可用方法的列表,您必须检查java文档和groovy文档的所有超类/接口

lst.name
groovy实际调用
lst.getAt('name')

getAt(字符串键)-可以在groovy文档中找到


最后,这里有一个关于groovy集合的文档:

请注意,虽然它在技术上是正确的,但不清楚,在代码审阅中,我将用
*。
替换它。请注意,虽然它在技术上是正确的,但不清楚,在代码审阅中,我将用
*。
替换它。事实并非如此。这是隐式排列运算符。有趣的是,我链接到的文档建议使用GPath,也许它们错了。事实并非如此。这是隐式排列运算符。有趣的是,我链接到的文档建议使用GPath,也许它们错了。