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

Why do I get compilation error when doing flatmap() call?

假设我有以下对象:

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 的特例,用于展平嵌套的 StreamOptional 和其他单子工具。

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

您的函数将在标准 map() 下正常工作,但:

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

您可以通过将结果包装在 Stream 实例中来使您的示例工作,但这并没有给您带来比上面的示例任何优势 - 仅出于教育目的这样做是有意义的:

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

是"daily"不是"dayly"。