今天在写项目的时候遇到一个问题,问题不难,但是以前没注意,这次遇到了记录一下。在方法checkImages(List imageList)中使用imageList.remove()时报错java.lang.UnsupportedOperationException,当时很奇怪,为什么会不支持操作?带着疑问去查询了资料,原来是这样的:某些List的实现类(如Arrays.asList()返回的List)是固定大小的,不支持对元素进行增删操作。如果要调用remove方法,要确保自己的List是一个可变的列表ArrayList。
public void checkImages(List<String> imageList) {
List<NingboPortalSettingImages> allImages = portalImagesMapper.selectByExample(NingboPortalSettingImagesExample.newAndCreateCriteria()
.example());
List<String> waitingDeleteImages = new ArrayList<>();
List<String> waitingInsertImages = imageList;
for (NingboPortalSettingImages image : allImages) {
if (!imageList.contains(image.getUrl())) {
waitingDeleteImages.add(image.getUrl());
portalImagesMapper.deleteByPrimaryKey(image.getId());
} else {
waitingInsertImages.remove(image.getUrl());
}
}
}
所以正确的写法应该是,将List waitingInsertImages = imageList ====> List waitingInsertImages = new ArrayList<>(imageList),这样就可以正确执行了。