Библиотека json simple. JSONArray to List<String>. Stream API

183
06 июля 2018, 21:30

У меня есть 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());

С чем связано данное поведение?

Answer 1

Проблема в том, что JSONArray расширяет "сырой" (raw type) ArrayList. Поэтому он наследует "сырой" метод stream(), который возвращает "сырой" Stream. Типы нестатических методов "сырых" типов "стираются" (erasure), поэтому collect(..) возвращает Object.

Можно вернуть обобщенные типы, явно приведя результат stream():

List<String> ads = ((Stream<?>)jsonArray.stream()).map(Object::toString).collect( Collectors.toList() );
Answer 2

может так будет работать?

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();
    }
READ ALSO
Собрать видеоряд из изображений Java

Собрать видеоряд из изображений Java

Средствами opencv я разбил видео на изображения(png), а теперь хочу собрать обратно(включая аудиоряд), но не знаю как

187
Как запустить Wildfly с нужным мне IP?

Как запустить Wildfly с нужным мне IP?

Intellij IDEA по дефолту запускает сервер по адресу 1270

163
Список языков в ISO3 android

Список языков в ISO3 android

Подскажите как узнать код языка в ISO3, и где собственно найти весь список языковМне необходимо это для того, чтобы пользователь сам выбирал...

173
Как получить список всех папок которые содержат аудио файлы

Как получить список всех папок которые содержат аудио файлы

Как получить список всех папок которые содержат аудио файлы?

208