У меня есть вложенная структура классов, которую я использую для десериализации моих данных:
Class A has a single property that is an object of Class B (say b)
Class B has a single property that is an object of Class C (say c)
Class C has a single property that is an object of Class D (say d)
Class D has a single property that is a a string (say e)
У меня есть данные, которые выглядят как
Map<String, List<Map<String, Map<String, Map<String, Map<String, String>>>>>> input =
ImmutableMap.of("Key",
ImmutableList.of(ImmutableMap.of("a",
ImmutableMap.of("b",
ImmutableMap.of("c",
ImmutableMap.of("d", "e"))))));
Я хочу проанализировать эту многоуровневую карту и поместить результат в карту
Map<String, String> result = new HashMap<>();
В конце я ожидаю, что result
map будет содержать это в конце: ["key", "e"]
У меня есть этот код, который работает, если карта содержит все промежуточные клавиши a, b, c and d
mapping.entrySet()
.stream()
.map(l -> l.getValue().stream()
.map(Optional::ofNullable)
.map(opta -> opta.map(A::getB))
.map(optb -> optb.map(B::getC))
.map(optc -> optc.map(C::getD))
.map(optd -> optd.map(D::getE))
.map(optv -> optv.orElse("default"))
.map(m -> result.put(l.getKey(), m))
.count())
.count();
но, например, сказать, что если введено
Map<String, List<Map<String, Map<String, Map<String, Map<String, String>>>>>> input =
ImmutableMap.of("Key",
ImmutableList.of(ImmutableMap.of("a",
ImmutableMap.of("b",null))));
, то мой код не работает:
java.lang.NullPointerException: null value in entry: b=null
Почему мой Optional.isNullable
не работает?