2017-08-18 32 views
1

比方说,我有以下对象:为什么在执行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>>

在此先感谢。

回答

2

flatMap方法是map的一种特殊情况,并且用于平坦化嵌套StreamOptional和其它一元工具。

在你的情况下,你没有提供返回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”。

相关问题