1

代码清单:

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

4

1 回答 1

1

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

这意味着stream()将返回一个Stream<Map<String, Object>>. 因此,它的map()方法需要一个Function<? super Map<String, Object>, ? extends R>.

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

于 2018-08-07T14:20:34.757 回答