Я использую Java 8 и Джексона, чтобы попытаться получить значение int из объекта json.Вот некоторый похожий код, который я использовал для проверки структуры.
HashMap<String, Object> myMap = new HashMap<String, Object>();
myMap
.entrySet()
.stream()
.forEach(x -> System.out.println(x.getKey() + " => " + x.getValue()));
и результат:
myKey1 => {"number": 1}
myKey2 =>{"number": 1}
myKey3 => {"number": 2}
Я пытаюсь использовать ключ, например myKey1, для поиска значения json, т. е. {«число»: 1} и вытащить фактическое число, которое для этого ключа равно 1.
Однако я не все знаю значения ключа, только ключ, который я хочу сопоставить.Поэтому я должен сделать это динамически.Я знаю структуру значений, и она всегда одинакова, за исключением того, что число может быть разным.
Я думаю, потому что я не знаю ключи и их порядок, плюс я использую entrySet, что вынуждает меня использовать Optional, что делает это более трудным.
Вотмой код, где я на самом деле использую ключ для получения значения json:
Optional<Object> object = myMap.entrySet().stream()
.filter(e -> e.getKey().equals(myKey))
.map(Map.Entry::getValue)
.findFirst();
Однако поток возвращается назад
Необязательно [{"number": 1}]
и я не могу получить число, чтобы вернуть его из метода.На самом деле у меня нет Java-класса для объекта, поэтому я предполагаю, что именно поэтому он возвращает Optional, поскольку я получаю ошибку компиляции без него, но я не уверен.
Есть идеи, как правильно это сделать?