Java 这是Groovy collect闭包的缩写吗?
我研究了处理JSON解析的Groovy代码,发现以下奇怪的代码我无法理解: list.groovyJava 这是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 平台
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,也许它们错了。