接口 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>)
【问题讨论】:
如果我使用 MapFunction<Map<String, Object>, R> func
编译,因为 Map<String, Object>
是 Stream 元素的类型。你有什么问题?
【参考方案1】:
MapListHandler
将导致查询返回 List<Map<String, Object>>
。
这意味着stream()
将返回Stream<Map<String, Object>>
。因此,它的map()
方法需要一个Function<? super Map<String, Object>, ? extends R>
。
当然MapListHandler
不是Map<String, Object>
的超类型,所以func
不是map()
的有效参数。
【讨论】:
以上是关于接口 java.util.stream.Stream<T> 中的方法映射不能应用于给定类型;的主要内容,如果未能解决你的问题,请参考以下文章