java 8 个收集器的问题类型不匹配:无法从 List<Object> 转换为 List<String>
issue with java 8 collectors Type mismatch: cannot convert from List<Object> to 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());
其中 res 是我从数据库中获取的结果集,不确定有什么问题吗?
我检查了以下完整示例:
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 的安全更新,因此本质上是相同的)。尝试清理您的项目并从头开始重建。
嗯,我最近也遇到过类似的错误 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.
所以请注意以下几点-:
- 已在Java构建路径中选择了合适的JDK。例如JDK 1.8 在这种情况下。
- 必须在Java编译器下选择合适的编译器版本(如上图所示) 在项目属性中。例如1.8
希望对您有所帮助。
检查我的编译器级别后(根据上面的 Ashish),
我意识到我在 List 或 Set 上都没有数据类型。一旦我添加它就起作用了。
List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
.map(x -> x * x)
.collect(Collectors.toSet());
请注意,如果您遇到此错误并且由于某种原因您无法使用 Java <1.8,您可以编写以下内容:
... .collect(Collectors.<String>toList());
我有早期版本的 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 是我从数据库中获取的结果集,不确定有什么问题吗?
我检查了以下完整示例:
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 的安全更新,因此本质上是相同的)。尝试清理您的项目并从头开始重建。
嗯,我最近也遇到过类似的错误 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.
所以请注意以下几点-:
- 已在Java构建路径中选择了合适的JDK。例如JDK 1.8 在这种情况下。
- 必须在Java编译器下选择合适的编译器版本(如上图所示) 在项目属性中。例如1.8
希望对您有所帮助。
检查我的编译器级别后(根据上面的 Ashish), 我意识到我在 List 或 Set 上都没有数据类型。一旦我添加它就起作用了。
List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
.map(x -> x * x)
.collect(Collectors.toSet());
请注意,如果您遇到此错误并且由于某种原因您无法使用 Java <1.8,您可以编写以下内容:
... .collect(Collectors.<String>toList());