为什么在执行 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;
}

现在,假设我有一个每日数据列表: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的特例,用于展平嵌套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

它是"每日"而不是"每天"。

最新更新