Проблема с сборщиками 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-:
- Соответствующий JDK был выбран в пути сборки Java. например JDK 1.8 в этом случае.
- Соответствующая версия компилятора должна быть выбрана в разделе 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());