Как отфильтровать определенный ключ от карты когда ключ плоский - PullRequest
0 голосов
/ 23 апреля 2020

Я получаю ответ, упомянутый ниже. Я хочу отфильтровать ключи, имеющие только состояние, как мы можем это сделать

Пример

 {

"response[0].id": 14,
"response[0].x": "ABCDED",
"response[0].y.code": "RERWRR",
"response[0].z.value": "TTTRRWW",

"response[1].id": 13,
"response[1].x": "RERERE",
"response[1].y.code": "TRTYUUU",
"response[1].z.value": "QWEAWE",

"response[2].id": 3,
"response[2].x": "POPOPO",
"response[2].y.code": "YUYUYU",
"response[2].z.value": "RUSUSUS",

"totalRecords": 3,
"limit": 100,
"offset": 0
}`

Я хочу отфильтровать только ответ [0 ] .x, ответ [1] .x, ответ [2] .x с карты

1 Ответ

0 голосов
/ 23 апреля 2020

Как уже упоминалось @Flown, структура вашего json на самом деле выглядит не очень хорошо. Что-то вроде этого имело бы больше смысла:

{
 "responses": [
   {
     "id": 3,
     "x": "ABC",
     "y": {
       "code": "CODE"
     },
     "z": {
       "value": "VALUE"
     }
   }, {
     ...
   }
 ],
  ...
}

Или даже лучше, если бы вы могли избавиться от x, y и z и получить что-то подобное:

{
 "responses": [
   {
     "id": 3,
     "status": "STATUS",
     "code": "CODE"
     "value": "VALUE"
   }, {
     ...
   }
 ]
}

Если вы не можете изменить структуру по какой-либо причине, вы можете отфильтровать карту следующим образом:

Map<String, Object> filteredMap = map.entrySet().stream()
    .filter(entry -> entry.getKey().contains("].x")
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Возвращает Map только с записями, где ключ содержит строку ]x., которая должно быть хорошо в вашем примере (ответ [1 ]. x , ответ [2 ]. x , ...).

Это должно работать, но все еще не очень хорошее решение. Было бы лучше, если бы вы могли изменить структуру json.

...