java 8 collectors的问题类型不匹配:无法从List <object>转换为List <string>

时间:2016-01-25 10:05:11

标签: java java-8 collectors

我正在使用早期版本的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 是我从数据库获取的结果集,不知道有什么问题吗?

3 个答案:

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

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

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

enter image description here

请注意以下几点 - :

  1. 已在 Java Build Path 中选择了适当的JDK。例如在这种情况下, JDK 1.8
  2. 必须在项目属性中的 Java编译器,如上面的屏幕截图中)选择适当的编译器版本。例如的 1.8
  3. 我希望这会对你有所帮助。

答案 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());