为什么在使用collectors.tomap时不能访问type字段?

gcuhipw9  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(312)

为什么我不能访问 id 财产 Device ?

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;
    }
}

请看这里:

7vhp5slm

7vhp5slm1#

你收到了一条误导性的错误信息。实际错误是使用 ConcurrentMap<Integer, Device> 当收集器返回的类型为 Map<Integer, Device> .
如果你想退货 Map 成为一个 ConcurrentMap ,您可以使用 toMap 接受供应商的变量(确定供应商的类型) Map 待退回)。
这样的方法应该有用:

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

或者正如亚历克西斯所说,只要使用 Collector.toConcurrentMap .

相关问题