Как прочитать значение ключа Specifi c Map в случае объекта массива - PullRequest
0 голосов
/ 05 мая 2020

У меня следующая структура карты

{empId=1234, empName=Mike, CDetails=[{"collegeName":"Peters Stanford","collegeLoc":"UK","collegeLoc":"UK"}]}

Мне нужно прочитать значение CollegeLo c из приведенной выше карты

Я пробовал этот способ, его работает, но есть ли способ лучше

    myMap.entrySet().stream().filter(map -> map.getKey().equals("CDetails")).forEach(e -> {

            List<Object> objsList = (List<Object>) e.getValue();

            for(int i=0;i<objsList.size();i++)
            {
                HashMap<String,String> ltr = (HashMap<String, String>) objsList.get(i);

                System.out.println(ltr.get("collegeLoc"));
            }



        });

1 Ответ

1 голос
/ 05 мая 2020

CDetails - это List, а не Map.

Попробуйте следующее:

empMap.entrySet().stream()
  .map(map -> map.get("CDetails"))
  .filter(Objects::nonNull)
  .flatMap(List::stream)
  .map(element -> ((Map)element).get("collegeLoc"))
  .filter(Objects::nonNull)
  .forEach(System.out::println);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...