java 8 收集器问题 类型不匹配:无法从 List<Object> 转换为 List<String>

2022-09-03 01:43:22

我有早期版本的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>

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);
}

以下是供参考的屏幕截图:enter image description here

现在让我解释一下为什么我会收到这个错误?在我的情况下,代码显示编译时错误,因为项目属性中的编译器版本不匹配。我选择了1.7,但它应该是1.8,因为这个功能已经在1.8中添加了。

enter image description here

因此,请注意以下几点:

  1. 已在 Java 构建路径中选择了适当的 JDK。例如,在这种情况下,JDK 1.8
  2. 必须在项目属性的 Java 编译器如上面的屏幕截图所示)下选择适当的编译器版本。例如 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的安全更新,因此本质上是相同的)。尝试清理项目并从头开始重新生成。


推荐