Java 8 Stream API для получения указанного c значения - PullRequest
0 голосов
/ 04 августа 2020

Имеет структурированное значение ниже JSON. Я хотел бы получить значение из «КЛЮЧ» в списке строк

"Test": {
    "ONE": {
      "First_Layer": {
        "KEY": "VALUE_1"
      },
      "First_Layer_1": {
        "KEY": "VALUE_2"
      }
    },
    "TWO": {
      "First_Layer_2": {
        "KEY": "VALUE_3"
      }
    }
  }

Ожидаемый результат (список строк):

[VALUE_1, VALUE_2, VALUE_3]

Пробовал, и он работает с одним слой, не со вторым слоем

final Map<String, Map<String, String>> value = document.get("Test", Collections.emptyMap());
        return value.values().stream()
            .map(valueMap -> valueMap.get("KEY"))
            .collect(Collectors.toList());

1 Ответ

2 голосов
/ 04 августа 2020

Ваши данные должны десериализоваться в Map<String, Map<String, Map<String, String>>>

Затем вы можете использовать flatMap для выравнивания первого слоя

List<String> res = data
        .entrySet()
        .stream()
        .flatMap(m -> m.getValue().entrySet().stream())
        .map(v-> v.getValue().get("KEY"))
        .collect(Collectors.toList());
...