为什么在执行flatmap()调用时会出现编译错误?
问题描述:
比方说,我有以下对象:为什么在执行flatmap()调用时会出现编译错误?
public class DaylyData {
private Date date;
private List<Integer> numersList;
// standard getters/setters
public Map<Integer, Date> getIntToDate() {
Map<Integer, Date> resultMap = new HashMap<>();
for(Integer number : getNumersList()) {
resultMap.put(number, getDate());
}
return resultMap;
}
现在,让我们说我有DaylyData的列表:List<DaylyData> resultList
。
什么将是以下的结果:
resultList.stream().flatMap(entity -> entity.getIntToDate());
如果我的这个结果分配给Stream<Map<Integer, Date>>
,我越来越Type mismatch: cannot convert from Map<Integer,Date> to Stream<? extends Map<Integer,Date>>
。
在此先感谢。
答
的flatMap
方法是map
的一种特殊情况,并且用于平坦化嵌套Stream
,Optional
和其它一元工具。
在你的情况下,你没有提供返回Stream
的函数,所以它不能用作参数flatMap
。
你的功能将正常工作与标准map()
,虽然:
resultList.stream()
.map(entity -> entity.getIntToDate()); // no compilation errors
你可以通过在Stream
例如包装的结果让你的榜样工作,但这种不会给你在上面的例子中带来任何好处 - 它是有道理这样做只为教育目的:
resultList.stream()
.flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error
这是“每天”而不是“DAYLY”。