Отображение нескольких значений ключа - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть ключ и несколько пар значений. Как отобразить значения.

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.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Как уже упоминалось в других ответах, существуют проблемы с вашим кодом, которые, кажется, указывают на то, что было бы полезно потратить немного больше времени на отличную документацию.С этим, как говорится, иногда полезно с рабочим примером.

Приведенный ниже код:

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 голосов
/ 09 апреля 2019

Есть несколько проблем с вашим кодом.Во-первых, чтобы решить 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: операторы и, возможно, во-первых, документация Groovy: синтаксис страниц, которые действительно хорошо написаны и глубоко погружаются в основы языка с простыми, но при этом отличными примерами.

...