Проблема с сборщиками java 8 Тип несоответствия: невозможно преобразовать из списка <Object> в список <String>

У меня был рабочий код с более ранней версией java 8, который я использовал для получения уникальных значений из списка, но так как я обновился до JDK 66, это дало мне ошибку

Несоответствие типов: невозможно преобразовать из List<Object> в List<String>

List<String> instList = new ArrayList<String>();

while (res.next()) {
    instList.add(res.getString("INST").toString());
}           

List<String> instListF = instList.stream().distinct().collect(Collectors.toList());

Где res - это результат, который я получаю из базы данных, не уверен, что не так, а идея?

Ответ 1

Ну, я также недавно столкнулся с подобной ошибкой Type mismatch: cannot convert from Set<Object> to Set<String>. Ниже приведен код snippet-:

public static void main(String[] args) {
    String[] arr = new String[]{"i", "came", "i", "saw", "i", "left"};

    Set<String> set = Arrays.asList(arr).stream().collect(Collectors.toSet());

    System.out.println(set.size() + "  distinct words: " + set);
}

Вот снимок экрана для reference-: enter image description here

Теперь позвольте мне объяснить, почему я получил эту ошибку? В моем случае код отображал ошибку времени компиляции, потому что было несоответствие в версии компилятора в свойствах проекта. Я выбрал 1,7, но это должно быть 1,8, поскольку эта функция была добавлена в 1,8.

enter image description here

Поэтому, пожалуйста, запишите ниже points-:

  1. Соответствующий JDK был выбран в пути сборки Java. например JDK 1.8 в этом случае.
  2. Соответствующая версия компилятора должна быть выбрана в разделе Java Compiler (как показано на снимке экрана выше) в свойствах проекта. например 1,8

Я надеюсь, что это поможет вам.

Ответ 2

Я проверил следующий полный пример:

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.stream.Collectors;
import java.util.List;
import java.util.ArrayList;

public class Test { 
    public List<String> test(ResultSet res) throws SQLException {
        List<String> instList = new ArrayList<String>();

        while (res.next()) {
            instList.add(res.getString("INST").toString());
        }           

        List<String> instListF = instList.stream().distinct().collect(Collectors.toList());
        return instListF;
    }
}

Он отлично компилируется с javac 8u25, 8u40, 8u60, 8u71 (обратите внимание, что 8u71 - это обновление безопасности 8u66, таким образом, по существу то же самое). Попробуйте очистить проект и восстановить его с нуля.

Ответ 3

После проверки моего уровня компилятора (согласно Ашишу выше), Я понял, что у меня нет ни типа данных ни в списке, ни в наборе. Как только я добавил, это сработало.

List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
     .map(x -> x * x)
     .collect(Collectors.toSet());