接口 java.util.stream.Stream<T> 中的方法映射不能应用于给定类型;

Posted

技术标签:

【中文标题】接口 java.util.stream.Stream<T> 中的方法映射不能应用于给定类型;【英文标题】:method map in interface java.util.stream.Stream<T> cannot be applied to given types; 【发布时间】:2018-08-15 16:47:09 【问题描述】:

代码清单:

protected List<R> getRows(String startDate, String endDate, Function<MapListHandler, R> func)

    ConnectionManager cm = new ConnectionManager();
    List<R> rows = null;
    try(Connection c = cm.getConnection()) 

        String sql = getSql();

        rows = new QueryRunner()
                .query(c, sql, new MapListHandler(), startDate, endDate, startDate, endDate)
                .stream()
                .map(func).collect(Collectors.toList());

     catch (SQLException e) 
        e.printStackTrace();
    
    finally 
        cm.closeConnection();
    

    return rows;

编译失败并显示以下消息:

接口 java.util.stream.Stream 中的方法映射不能应用于给定类型; [错误] 必需:java.util.function.Function,?扩展 R> [错误] 发现:java.util.function.Function [错误] 原因:无法推断类型变量 R [错误](参数不匹配;java.util.function.Function 无法转换为 java.util.function.Function super java.util.Map,? 扩展 R>)

【问题讨论】:

如果我使用 Map 而不是 MapHanlder,代码会编译 当然,它使用 Function&lt;Map&lt;String, Object&gt;, R&gt; func 编译,因为 Map&lt;String, Object&gt; 是 Stream 元素的类型。你有什么问题? 【参考方案1】:

MapListHandler 将导致查询返回 List&lt;Map&lt;String, Object&gt;&gt;

这意味着stream() 将返回Stream&lt;Map&lt;String, Object&gt;&gt;。因此,它的map() 方法需要一个Function&lt;? super Map&lt;String, Object&gt;, ? extends R&gt;

当然MapListHandler 不是Map&lt;String, Object&gt; 的超类型,所以func 不是map() 的有效参数。

【讨论】:

以上是关于接口 java.util.stream.Stream<T> 中的方法映射不能应用于给定类型;的主要内容,如果未能解决你的问题,请参考以下文章

什么是接口测试中的接口?

vga接口和hdmi接口的区别是啥

多测师拱墅校区肖sir_高级金牌讲师_接口测试之接口文档和接口用例

接口——嵌套,接口和类型间的转换,空接口类型,类型分支

什么是接口以及接口测试

串行接口和并行接口有啥区别??