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

时间:2018-03-07 14:30:59

标签: java exception lambda java-stream apache-commons-dbutils

代码清单:

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中的方法映射&lt; T&gt;不能适用于给定的类型;   需要[ERROR]:java.util.function.Function&lt;? super java.util.Map&lt; java.lang.String,java.lang.Object&gt; ,?扩展R>   [ERROR] found:java.util.function.Function&lt; org.apache.commons.dbutils.handlers.MapListHandler,R&gt;   [错误]原因:无法推断类型变量(R)   [ERROR](参数不匹配; java.util.function.Function&lt; org.apache.commons.dbutils.handlers.MapListHandler,R&gt;无法转换为java.util.function.Function&lt;?super java.util.Map&lt; java .lang.String,java.lang.Object&gt; ,? extends R&gt;)

1 个答案:

答案 0 :(得分:0)

MapListHandler将导致查询返回List<Map<String, Object>>

这意味着stream()将返回Stream<Map<String, Object>>。因此,其map()方法期望使用Function<? super Map<String, Object>, ? extends R>

当然,MapListHandler不是Map<String, Object>的超类型,因此func不是map()的有效参数。