2017-08-18 15 views
1

のは、私は以下の目的を持っているとしましょう:List<DaylyData> resultListflatmap()の呼び出し時にコンパイルエラーが発生するのはなぜですか?

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のリストを持っているとしましょう。次の結果がどうなるか

:私はStream<Map<Integer, Date>>にその結果を割り当てた場合

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

、私はType mismatch: cannot convert from Map<Integer,Date> to Stream<? extends Map<Integer,Date>>を取得しています。

ありがとうございます。

答えて

2

flatMap方法はmapの特殊なケースであり、ネストされたStreamを平坦化するために使用される、Optional、及び他のモナドのツール。あなたのケースでは

、あなたはStreamを返すので、それはflatMapのparamとして使用することができない機能を提供していません。

あなたの機能は、しかし、標準map()で正常に動作します:

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

あなたはStreamインスタンスに結果をラップすることにより、あなたの例の作品を作ることができるが、これは上記の例の上にあなたにどんな利点を与えるものではありません -

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

それはだ「毎日」ではない「dayly」:それは唯一の教育目的のためにそれを行うことは理にかなっています。

関連する問題