为什么在进行flatmap()调用时会出现编译错误?

时间:2017-08-18 16:16:46

标签: java-8 java-stream 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>>

提前致谢。

1 个答案:

答案 0 :(得分:2)

flatMap方法是map的特例,用于展平嵌套的StreamOptional和其他monadic工具。

在您的情况下,您没有提供返回Stream的函数,因此它不能用作flatMap参数。

您的功能可以使用标准map()正常工作,但是:

resultList.stream()
  .map(entity -> entity.getIntToDate()); // no compilation errors

您可以通过将结果包装在Stream实例中来使您的示例正常工作,但这并不比上述示例更有优势 - 仅仅出于教育目的这样做才有意义:

resultList.stream()
   .flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error

这是“每日”而不是“每天”。