繁体   English   中英

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

[英]Converting from List of Object to List of String using streams

我最近开始在Java流中工作。 我试图从我的一个SQL查询的结果集中获取String值。 结果集仅从数据库中选择一个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());

我相信地图具有将数据从一种类型转换为另一种类型的功能。 在这种情况下,从Object到String,然后将它们收集在String列表中。

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

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

因为Query.getResultList()返回原始类型 List所以它将中断很大程度上基于泛型类型信息的流管道。 原始类型有效地删除了有关泛型的所有信息,因此流收集器返回Object

您可以通过手动将泛型类型强制转换为List<?>

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

使用TypedQuery<String>代替Query

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM