我研究了处理json解析的groovy代码,发现了以下我无法理解的奇怪代码:
列表.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]
我不明白 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], null]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve]
[Bill, Jobs, Steve, null]
[Bill, Jobs, Steve, null]
``` `lst.name` 是忽略空值的gpath。因此,如果原始列表包含空值,则返回的新列表的长度将小于原始列表的长度。 `lst.name` 相当于 `lst.findAll{ it != null }.collect{ it.name }` . `lst*.name` 是 `spread dot operator` 或星点运算符。返回的新列表的长度等于原始列表的长度。如果原始列表中的某些值 `null` ,则新列表中的相应值将为null和no `NullPointerException` 将被抛出。 `lst*.name` 相当于 `lst.collect{ it?.name }` .
2条答案
按热度按时间wkyowqbh1#
它是集合的gpath符号。
gpath可用于处理xml、json和集合等数据。
0qx6xfy62#
def lst = []
是java.util.arraylist你可以用
println lst.getClass()
检查一下ArrayList
工具Iterable
,Collection
, ... 和其他接口groovy可以在任何级别的超级接口或超级类上添加功能。
groovygdk文档解释了groovy添加到java中的其他功能
要获得groovy中所有可用方法的列表,您必须检查javadoc和groovydoc的所有超类/接口。
万一
lst.name
groovy实际上lst.getAt('name')
getat(字符串键)-可以在groovy文档集合中找到最后是一篇关于groovy集合的文档:http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html