显示密钥的多个值

问题描述 投票:0回答:2

我有一个键和多个值对。显示值。

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.
groovy keyvaluepair
2个回答
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

什么时候跑。格式化并不完全是您指定的格式,但至少您可以了解嵌套迭代的完成方式。您的示例中的数据被破坏到很难确切知道您的意图。我以我认为与您的意图一致的方式格式化数据。


0
投票

您的代码存在多个问题。首先,要解决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,也许首先是Groovy Documentation: Syntax页面,这些页面写得非常好,并且通过简单但很好的例子深入学习语言基础知识。

© www.soinside.com 2019 - 2024. All rights reserved.