我正在使用早期版本的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 是我从数据库获取的结果集,不知道有什么问题吗?
答案 0 :(得分:6)
我最近也遇到过类似的错误Type mismatch: cannot convert from Set<Object> to Set<String>
。以下是代码段 - :
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);
}
现在让我解释一下为什么我会收到此错误?在我的情况下,代码显示编译时错误,因为项目属性中的编译器版本不匹配。我选择了 1.7 ,但它应该 1.8 ,因为此功能已添加到 1.8 。
请注意以下几点 - :
我希望这会对你有所帮助。
答案 1 :(得分:4)
我检查了以下完整示例:
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的安全更新,因此基本相同)。尝试清理项目并从头开始重建。
答案 2 :(得分:1)
在检查了我的编译器级别之后(按照上述Ashish), 我意识到列表或集合上都没有数据类型。一旦添加,它就起作用了。
List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
.map(x -> x * x)
.collect(Collectors.toSet());