首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用streams将对象列表转换为字符串列表

使用streams将对象列表转换为字符串列表
EN

Stack Overflow用户
提问于 2019-02-14 21:28:16
回答 2查看 3.5K关注 0票数 1

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

所以我就这么做了:

代码语言:javascript
复制
List<String> list = query.getResultList().stream().map(Object::toString).collect(Collectors.toList());

或者:

代码语言:javascript
复制
List<String> list =  = query.getResultList().stream().map(String::valueOf).collect(Collectors.toList());

我相信map具有将数据从一种类型转换为另一种类型的函数。在这种情况下,从对象到字符串,然后将它们收集到一个字符串列表中。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-14 21:37:59

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

您可以通过手动将泛型类型强制转换为List<?>来解决此问题

代码语言:javascript
复制
List<String> collect = ((List<?>) query.getResultList()).stream()
    .map(Object::toString)
    .collect(Collectors.toList());
票数 3
EN

Stack Overflow用户

发布于 2019-02-14 21:47:24

使用TypedQuery而不是Query

这消除了相当多余的重新映射,并引入了类型安全性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54691567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档