У меня есть 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();
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости