2016-03-28 8 views
1

idプロパティにDeviceという名前でアクセスできないのはなぜですか?Collectors.toMapを使用しているときに、なぜ型フィールドにアクセスできないのですか?

final List<Device> devicesList = jsonFileHandlerDevice.getList(); 

ConcurrentMap<Integer, Device> map = 
     devicesList.stream() 
        .collect(Collectors.toMap(item -> item.id, item -> item)); 

どこ

public class Device { 

    public MobileOs mobileOs; 
    public Integer id; 


    public Device() { 
    } 

    public Device(MobileOs mobileOs, double osVersion, int allocatedPort, Integer id, String uuid) { 
     this.mobileOs = mobileOs; 
     this.id = id; 
    } 
} 

はこちらを参照してください。

enter image description here

+0

誤解を招くようなエラーメッセージが表示されている可能性があります。私は実際のエラーは、コレクタによって返された型が 'Map 'である場合、 'ConcurrentMap '型を使用していると信じています。返される 'Map'を' ConcurrentMap'にしたい場合は、サプライヤを受け入れる 'toMap'バリアントを使う必要があります(返されるMapの型を決定します)。 – Eran

+0

私の追加スクリーンショットを見る –

+0

エラーメッセージは何ですか? –

答えて

2

あなたは誤解を招くようなエラーメッセージが表示されました。コレクタによって返された型がMap<Integer, Device>の場合、実際のエラーはConcurrentMap<Integer, Device>型を使用しています。

あなたがConcurrentMapする返さMapしたい場合は、(返されるMapの種類を決定する)サプライヤーを受け入れtoMapバリアントを使用することができます。このような

何か作業をする必要があります:

ConcurrentMap<Integer, Device> map = 
     devicesList.stream() 
       .collect(Collectors.toMap(item -> item.id, 
              item -> item, 
              (item1,item2)->item2, 
              ConcurrentHashMap::new)); 

やアレクシスがちょうどCollector.toConcurrentMapを使用し、コメントなど。

+0

を参照してください。_「toMapバリアントを使用する必要があります」_ ...または単に「Collectors.toConcurrentMap」を使用してください。 –

+0

@ AlexisC.Iはそれを認識していませんでした。 APIにこのようなコレクターが含まれている可能性はありませんでした。ありがとう:) – Eran

関連する問題