Просто используйте Map
Map<Object, Device> devicesToDelete = new HashMap<>();
List<Device> oldDeviceList = getCurrentDevices();
for(Device deviceFromOldList: oldDeviceList) {
devicesToDelete.putIfAbsent(deviceFromOldList.id, deviceFromOldList);
}
// in case you need a Collection:
Collection<Device> allDevicesToDelete = devicesToDelete.values();
putIfAbsent
, чтобы сохранить отображение, только если ключ еще не присутствует.Это даст вам производительность хеширования, учитывая только идентификатор.
Вы можете изменить аргумент типа Object
в Map<Object,Device>
на любой тип, который имеет ваш идентификатор, хотя это не имеет значения для операции,если все, что вам нужно в конце, это Collection<Device>
.
. Вы можете использовать поток, например,
Map<Object, Device> devicesToDelete = getCurrentDevices().stream()
.collect(Collectors.toMap(
deviceFromOldList -> deviceFromOldList.id, Function.identity(), (a,b) -> a));
, однако, остается спорным, является ли это необходимым изменением.Цикл неплохой.