JsonObject Stream обрабатывает пустые значения - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь поместить значения JsonObject в пользовательский ArrayList с помощью Streams

    List<MyClass> custom = new ArrayList<>();

Я отображаю поток на JsonObject

.map(JsonElement::getAsJsonObject)
                .forEach(jsonObject -> custom.add(new MyClass(
                        jsonObject.get("stuff1").getAsString(),
                        jsonObject.get("stuff2").getAsString(),
                        jsonObject.get("stuff3").getAsLong(),
                        jsonObject.get("stuff4").getAsInt())));

и попробуйте добавить, все отлично работает.

, но значение stuff4 может отсутствовать в jsonObject (сервер не отправил атрибут stuff4 JsonObject), и именно здесь я получаю исключение нулевого указателя. Кто-нибудь знает, как я могу справиться с этим с помощью gson lib? ответ с stream#collect вместо stream#forEach был бы также хорош

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

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

Gson gson = new Gson();


.map(JsonElement::getAsJsonObject)
                .forEach(jsonObject -> custom.add(gson.fromJson(jsonObject.toString(),MyClass.class)))
);
0 голосов
/ 29 октября 2018
.map(JsonElement::getAsJsonObject)
                .forEach(jsonObject -> custom.add(new MyClass(
                        jsonObject.get("stuff1").getAsString(),
                        jsonObject.get("stuff2").getAsString(),
                        jsonObject.get("stuff3").getAsLong(),
                        jsonObject.get("stuff4")==null? null:jsonObject.get("stuff4").getAsInt())));

или

.map(JsonElement::getAsJsonObject)
                    .forEach(jsonObject -> custom.add(new MyClass(
                            ...
                            jsonObject.has("stuff4")? jsonObject.get("stuff4").getAsInt():null)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...