【问题标题】:Why do I get compilation error when doing flatmap() call?为什么在执行 flatmap() 调用时会出现编译错误?
【发布时间】:2018-01-27 09:30:57
【问题描述】:

假设我有以下对象:

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&lt;DaylyData&gt; resultList

以下结果会是什么:

resultList.stream().flatMap(entity -> entity.getIntToDate());

如果我将结果分配给Stream&lt;Map&lt;Integer, Date&gt;&gt;,我得到Type mismatch: cannot convert from Map&lt;Integer,Date&gt; to Stream&lt;? extends Map&lt;Integer,Date&gt;&gt;

提前致谢。

【问题讨论】:

    标签: java-8 java-stream flatmap


    【解决方案1】:

    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
    

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

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2011-07-10
      • 2013-08-14
      • 2011-07-20
      • 2014-10-11
      • 1970-01-01
      • 2012-05-30
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多