java - 使用流从对象列表转换为字符串列表

标签 java java-8 java-stream

我最近开始从事 Java 流方面的工作。我试图从我的一个 SQL 查询的结果集中获取字符串值。结果集仅从数据库中选择一个 String/Varchar 列。

所以我做了:

List<String> list = query.getResultList().stream().map(Object::toString).collect(Collectors.toList());

或:

List<String> list =  = query.getResultList().stream().map(String::valueOf).collect(Collectors.toList());

我相信 map 需要一个函数来将数据从一种类型转换为另一种类型。在这种情况下,从 Object 到 String,然后将它们收集在一个 String 列表中。

但上面的代码显示编译时错误:无法从对象转换为字符串列表。

请建议我这样做的正确方法,并解释我的理解有什么问题。

最佳答案

因为 Query.getResultList() 返回 raw type List它将破坏严重基于通用类型信息的流管道。原始类型在使用时有效地删除了有关泛型类型的所有信息,因此流收集器返回 Object .

您可以通过手动引入通用类型并强制转换为 List<?> 来解决这个问题:

List<String> collect = ((List<?>) query.getResultList()).stream()
    .map(Object::toString)
    .collect(Collectors.toList());

关于java - 使用流从对象列表转换为字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54691567/

相关文章:

java - 如何在 Linux 上调试 native Java 崩溃?

java - 如果在 Java 8 中流之前集合为 null,如何返回 false?

java - Java 8 中自定义流方法支持延迟/延迟并行的最佳方法

java - 嵌套流 java 8

java - Java中的静态变量未初始化

java - 微服务架构中如何使用feign客户端上传多个Multipart文件

java - 将列表拆分为 3 个子列表 Java 8+

java - Java流将字符串列表排序为数字问题

java - 使用 java8 流将 Map<Integer, List<Integer>> 转换为 List<Integer>

Java-多态性 : legal vs illegal declarations