显示一个键的多个值
Display multiple values of a key
我有一个键和多个值 pairs.how 来显示这些值。
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.
您的代码存在多个问题。首先,要解决 NullPointerException
,您只是忘记声明 name
属性 的接收者:
println("emp name is:" + item.name) // Property `name` is set on `item`
此外,地图包含不同的键。第一个有一个 qualifications
键,后者有一个 qualification
- 注意到丢失的字母 s 了吗?最后,在均衡键时,应该会出现另一个 NullPointerException
,因为您正在尝试获得 java 资格的第一个和第二个条目,这第二个 empData 条目不存在。
解决这些问题后,通过将值类型更改为 String 来获得所需的输出应该是一件轻而易举的事情。您的值是那里的陈述,即 01/10/1970 是一个产生 0.0000507614
的除法,这同样适用于 5/6
陈述。
我建议阅读 Groovy Documentation: Operators and maybe, first, the Groovy Documentation: Syntax 页面,这些页面写得非常好,并通过简单但很好的示例深入探讨了语言基础知识。
如其他答案中所述,您的代码存在一些问题,这似乎表明您花更多时间阅读 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
当 运行。格式与您指定的不完全相同,但至少您可以了解如何完成嵌套迭代。您的示例中的数据被破坏到很难确切知道您的意图的程度。我以我认为符合您意图的方式格式化数据。
我有一个键和多个值 pairs.how 来显示这些值。
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.
您的代码存在多个问题。首先,要解决 NullPointerException
,您只是忘记声明 name
属性 的接收者:
println("emp name is:" + item.name) // Property `name` is set on `item`
此外,地图包含不同的键。第一个有一个 qualifications
键,后者有一个 qualification
- 注意到丢失的字母 s 了吗?最后,在均衡键时,应该会出现另一个 NullPointerException
,因为您正在尝试获得 java 资格的第一个和第二个条目,这第二个 empData 条目不存在。
解决这些问题后,通过将值类型更改为 String 来获得所需的输出应该是一件轻而易举的事情。您的值是那里的陈述,即 01/10/1970 是一个产生 0.0000507614
的除法,这同样适用于 5/6
陈述。
我建议阅读 Groovy Documentation: Operators and maybe, first, the Groovy Documentation: Syntax 页面,这些页面写得非常好,并通过简单但很好的示例深入探讨了语言基础知识。
如其他答案中所述,您的代码存在一些问题,这似乎表明您花更多时间阅读 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
当 运行。格式与您指定的不完全相同,但至少您可以了解如何完成嵌套迭代。您的示例中的数据被破坏到很难确切知道您的意图的程度。我以我认为符合您意图的方式格式化数据。