У меня есть json строка, которая представляется собой массив
["829390","831690","831700","831510","844310","850950"]
Используя библиотеку json simple, я получил JSONArray, после чего, используя stream, попытался получить List<String>, но IDEA подчеркнула мой код, жалуясь на некорректность типов (Required: List<String> Found: Object)
String jsonStr = "[\"829390\",\"831690\",\"831700\",\"831510\",\"844310\",\"850950\"]";
JSONArray jsonArray = (JSONArray) JSONValue.parseWithException(jsonStr);
List<String> ads = jsonArray.stream().map(Object::toString).collect(Collectors.toList());
С чем связано данное поведение?
Проблема в том, что JSONArray расширяет "сырой" (raw type) ArrayList. Поэтому он наследует "сырой" метод stream(), который возвращает "сырой" Stream. Типы нестатических методов "сырых" типов "стираются" (erasure), поэтому collect(..) возвращает Object.
Можно вернуть обобщенные типы, явно приведя результат stream():
List<String> ads = ((Stream<?>)jsonArray.stream()).map(Object::toString).collect( Collectors.toList() );
может так будет работать?
String jsonStr = "[\"829390\",\"831690\",\"831700\",\"831510\",\"844310\",\"850950\"]";
JSONArray jsonArray = null;
try {
jsonArray = (JSONArray) JSONValue.parseWithException(jsonStr);
List<String> ads = (List<String>) jsonArray.stream().map(Object::toString).collect(Collectors.toList());
for (String s:ads) {
System.out.println(s);
}
} catch (ParseException e) {
e.printStackTrace();
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники