Преобразование из списка объектов в список строк с использованием потоков - PullRequest
0 голосов
/ 14 февраля 2019

Я недавно начал работать в потоках Java.Я пытался получить значения String из набора результатов одного из моих SQL-запросов.Результирующий набор выбирает только столбец String / Varchar из БД.

Итак, я сделал:

List<String> list = query.getResultList().stream().map(Object::toString).collect(Collectors.toList());

или:

List<String> list =  = query.getResultList().stream().map(String::valueOf).collect(Collectors.toList());

Я считаю, что карта занимаетфункция для преобразования данных из одного типа в другой.В этом случае из объекта в строку и затем соберите их в список строк.

Но приведенный выше код показывает ошибку времени компиляции: невозможно преобразовать объект в список строк.

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Используйте TypedQuery<String> вместо Query.

Это избавляет от довольно избыточного переопределения и обеспечивает безопасность типов.

0 голосов
/ 14 февраля 2019

Поскольку Query.getResultList() возвращает необработанный тип List, он нарушает конвейер потока, который в значительной степени основан на информации общего типа.Необработанные типы эффективно удаляют всю информацию об универсальных типах при их использовании, поэтому потоковый сборщик возвращает Object.

. Чтобы обойти это, можно вручную ввести универсальный тип с приведением к List<?>:

List<String> collect = ((List<?>) query.getResultList()).stream()
    .map(Object::toString)
    .collect(Collectors.toList());
...