使用Collectors.toMap时为什么无法访问类型字段?

时间:2016-03-28 09:48:39

标签: java list dictionary lambda java-stream

为什么我无法访问doInBackground()的{​​{1}}属性?

id

,其中

Device

见这里:

enter image description here

1 个答案:

答案 0 :(得分:2)

您收到了误导性错误消息。当收集器返回的类型为ConcurrentMap<Integer, Device>时,实际错误使用Map<Integer, Device>类型。

如果您希望返回的MapConcurrentMap,则可以使用接受供应商的toMap变体(确定Map的类型)返回)。

这样的事情应该有效:

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

或正如Alexis所评论的那样,只需使用Collector.toConcurrentMap