【问题标题】:Converting from List of Object to List of String using streams使用流从对象列表转换为字符串列表
【发布时间】:2019-02-14 13:28:15
【问题描述】:

我最近开始研究 Java 流。我试图从我的一个 SQL 查询的结果集中获取字符串值。结果集仅从 DB 中选择一个 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 列表中。

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

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

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    使用TypedQuery&lt;String&gt; 而不是Query

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

    【讨论】:

      【解决方案2】:

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

      您可以通过手动引入泛型类型并强制转换为List&lt;?&gt; 来解决此问题:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2019-01-17
        • 2018-05-01
        • 2015-02-25
        • 1970-01-01
        相关资源
        最近更新 更多