gpt4 book ai didi

java.lang.UnsupportedOperationException ImmutableList.remove 当我没有使用 ImmutableList

转载 作者:行者123 更新时间:2023-11-29 04:48:41 24 4
gpt4 key购买 nike

我有这个代码

    final List<String> connectedIds = getConnectedDevices();
final List<Device> allDbDevicesAsList = getAllDbDevicesAsList();

List<Device> connectedDevices = new ArrayList<>();
for (int i = 0; i < allDbDevicesAsList.size(); i++) {
int size = connectedIds.size();
for (int j = 0; j < size; j++) {
final Device currentDevice = allDbDevicesAsList.get(i);
if(currentDevice.uuid == connectedIds.get(j))
{
connectedDevices.add(currentDevice);
connectedIds.remove(j);
break;
}
}
}

我得到了这个异常,甚至以为我不使用 ImmutableList

我深入研究了 getConnectedDevices()

的所有方法调用
java.lang.UnsupportedOperationException
at com.google.common.collect.ImmutableList.remove(ImmutableList.java:479)
at com.waze.automation.client.services.web.lib.devices.DevicesServiceLocal.getDevices(DevicesServiceLocal.java:66)
at com.waze.mobileautomation.devices.DevicesServiceLocalTest.testGetAvailableDevices_returnsOnly(DevicesServiceLocalTest.java:194)

使用此代码将获得相同的交集逻辑,但效率较低。

    List<Device> connectedDevices = allDbDevicesAsList.stream()
.filter(item -> connectedIds.contains(item.uuid))
.collect(Collectors.toList());

您将如何重写交集代码?

为什么我还是会收到这个错误?

最佳答案

您可以将设备 ID 列表从 getConnectedDevices() 方法传递到新的 ArrayList:

 final List<String> connectedIds = new ArrayList<>(getConnectedDevices());

这会将所有值从 ImmutableList 复制到一个 ArrayList 中,您可以从中删除项目。

您使用流提供的示例看起来更加简洁易懂。除非它具有 Not Acceptable 已确认性能影响,否则它看起来是最好的方法。

关于java.lang.UnsupportedOperationException ImmutableList.remove 当我没有使用 ImmutableList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36250104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com