Java 8 收集器问题类型不匹配:无法从 List<Object> 转换为 List<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());

我从数据库中获取的结果集在哪里, 不确定 有什么问题?

原文由 Nomad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

好吧,我最近也遇到过类似的错误 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. Java Build Path 中选择了合适的 JDK。例如本例中的 JDK 1.8
  2. 必须在项目属性中的 Java 编译器( _如上图所示_)下选择合适的 编译器版本。例如 1.8

我希望这会对你有所帮助。

原文由 Ashish Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

我检查了以下完整示例:

 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 的安全更新,因此本质上是相同的)。尝试清理您的项目并从头开始重建。

原文由 Tagir Valeev 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题