我最近开始从事 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/