我有一个键和多个值对。如何显示值。
def empData=[[dob:01/10/1970, qualifications:[java:[5/6, 7]],name:'T1'],
[dob:01/02/1981,qualification:[DBA:['Professional','Specialist']],name:'T2']]
empData.eachWithIndex{item,idx->
println("emp dob:"+item.dob);
String[] qualifications = item.qualifications.get("java");
println("qualification is:"+qualifications[0]);
println("qualification is:"+qualifications[1]);
println("emp name is:"+name);
}
我希望输出如下:
// first record
01/10/1970
5/6
7
T1
second record
01/02/1981
Professional
Specialist
T2
Throws an error null pointer exception.
答案 0 :(得分:1)
如其他答案中所述,您的代码中存在一些问题,似乎表明您花一些时间阅读groovy文档将很有用。话虽这么说,有时对于一个可行的例子还是有用的。
以下代码:
def employees=[[dob: '01/10/1970',
name: 'T1',
qualifications: [java: ['5 years', '15 projects'],
python: ['Senior Developer']]],
[dob: '01/02/1981',
name: 'T2',
qualifications: [dba: ['Professional','Specialist']]]]
employees.indexed().each { idx, employee ->
println " Employee: ${employee.name}"
println " dob: ${employee.dob}"
employee.qualifications.each { field, qualifications ->
println " ${field} - ${qualifications.join(', ')}"
}
}
打印出:
Employee: T1
dob: 01/10/1970
java - 5 years, 15 projects
python - Senior Developer
Employee: T2
dob: 01/02/1981
dba - Professional, Specialist
运行时。格式设置不完全是您指定的格式,但是至少您可以对嵌套迭代的完成方式有所了解。您的示例中的数据已损坏到难以确切了解您的意图的程度。我以符合您意图的方式格式化了数据。
答案 1 :(得分:0)
您的代码存在多个问题。首先,要解决NullPointerException
,您只需忘记声明name
属性的接收者:
println("emp name is:" + item.name) // Property `name` is set on `item`
此外,地图包含不同的键。第一个具有qualifications
键,第二个具有qualification
-注意丢失的字母s吗?最后,在对键进行均衡之后,应该再出现一个NullPointerException
,因为您正在尝试获取 java 限定的第一项和第二项,而第二项则不存在empData条目。
解决了这些问题之后,应该很容易通过将值类型更改为String来获得所需的输出。您的值就是其中的语句,即1970年1月10日是产生0.0000507614
的除法,同样适用于5/6
语句。
我建议阅读Groovy Documentation: Operators,也许首先阅读Groovy Documentation: Syntax页面,这些页面写得很好,并通过简单而出色的示例深入探讨了语言基础。