Парсинг Json и добавление элементов в List

Привет!

Ситуация следующая:
получаю по API String с айдишниками и балансом, преобразовываю его в jsonArray, прохожу по массиву и добавляю по ключу amount суммы в strList, затем преобразовываю strList в doubleList и суммирую все элементы doubleList чтобы получить общую сумму.

Хочу посоветоваться:

Реализую такое впервые, поэтому не уверен на счет правильности подхода. Возможно использую слишком много преобразований / перезаписей из одного вида в другой. Если есть вариант миновать некоторые преобразования и получить конечный результат, буду рад увидеть предложения

Я бы рекомендовал полученный json преобрaзовать в list объектов (десериализовать) (сделать класс типа респонса), и потом уже из списка объектов доставать прямо double значения через его properties.

1 Like
  1. Нет смысла конвертить лист->стрим->лист->стрим->дабл, вы можете сделать сразу лист->стрим->дабл
strBalanceList.stream().map(Double::valueOf).map(Double::doubleValue).sum();

Что-то типа того. Не проверял на правильность синтаксиса - ваша часть работы :slight_smile:

  1. Не очень элегантно выглядит преобразование JSON строки в List.
    Рекомендую Gson
    Примеры
    JSON to Array or JSON to List with GSON in Java | Lenar.io
    JSON to Object and Object to JSON in Java with GSON | Lenar.io
1 Like

переписал в итоге вот так:

getTotalBalance

Ок, поскольку вывсе равно намерены использовать JSONArray, тогда можно вообще уйти от стримов и сделать все сразу во время первого прохода по массиву.

...
double sum = 0;
for (int i = 0; i < jsonArray.length(); i++) {
    String next = jsonArray.getJSONObject(i).getString("amount");
    sum += next == null ? 0 : Double.valueOf(next);
}
return sum;

Не тестил… Это на вас :slight_smile: