2016-10-21 4 views
-2

これをどのように修正しますか?Java 8:マップするPOJOのキャストリスト - ID-POJO =ストリームのmap(<?super C、?>)は(<ラムダ式>、<ラムダ式>)には適用できません

エラー

マップ(機能)ストリーム内 がに を適用することはできません(ラムダ式>、ラムダ式>)

static class C { 
    int id; 

    public int getId() { 
     return id; 
    } 
} 

    Map<Integer, C> c = Arrays.asList(new C()).stream().collect(Collectors.toMap(c -> c.getId(), c -> c)); 
+2

これは 'map()'の仕組みとは異なります。これは 'Map'を作成しません。 – Kayaman

+0

はい、紛失しました。 – ArthurDn

答えて

2

この

Map<Integer, C> map = Arrays.asList(new C()) 
          .stream() 
          .collect(Collectors.toMap(C::getId, c -> c)); 

何マップをお試しくださいあなたの例では、ストリーム内のオブジェクトをあるものから別のものに変更することです。例えばCのストリームがあり、map(c -> c.getId())はストリームに変更してIntegersになります。あなたが探していたのは、ストリームを終了させ、取得しようとしているオブジェクトに "収集"できるようにするcollect関数です。

+0

'Arrays.asList(new C())。ストリーム()。collect(Collectors.toMap(C :: getId、Function.identity())); ' – Saravana

+1

私はいつもFunction.identityがもっとたくさんありますx - > xを行うよりも冗長です – Ash

関連する問題