Java List 元素删除陷阱

上篇文章写到了对文件进行批量上传,其中遇到一个问题,就是针对用户上传来的文件进行筛选删除

错误的写法:

/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
for(MultipartFile file : files){
	//名字是否合适
	if(file.getName() == null && file.getName().equals("")){
		files.remove(file);
		continue;
	}
	//是否是图片
	boolean isImg = FileUtil.filterType(file.getContentType());
	if (!isImg) {
		files.remove(file);
		continue;
	}
	//是否大小合适
	boolean isSuitableSize = FileUtil.filterFileSize(file);
	if (!isSuitableSize) {
		files.remove(file);
		continue;
	}
}
咋一看,好像没什么错,其实仔细一想,发现问题,每次删除完之后,那么List就少1,所以会出现错误


正确的写法:

/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
Iterator<MultipartFile> iter= files.iterator();
while (iter.hasNext()){
	MultipartFile file= iter.next();
	//名字是否合适
	if(file.getName() == null && file.getName().equals("")){
		iter.remove();
		continue;
	}
	//是否是图片
	boolean isImg = FileUtil.filterType(file.getContentType());
	if (!isImg) {
		iter.remove();
		continue;
	}
	//是否大小合适
	boolean isSuitableSize = FileUtil.filterFileSize(file);
	if (!isSuitableSize) {
		iter.remove();
		continue;
	}
}

里面的小方法:

/**
 * 过滤文件
 * 
 * @param types
 * @return
 */
public static boolean filterType(String type) {
	for (String temp : FinalValues.userRegisterAllowFileTypeList) {
		if (temp.equals(type)){
			return true;
		}
	}
	return false;
}


/**
 * 过滤图片的大小
 * @param multipartFile
 * @return
 */
public static boolean filterFileSize(MultipartFile multipartFile) {
	if(multipartFile.getSize() <0 || multipartFile.getSize() > FinalValues.MAX_ALBUM_PHOTO_SIZE){
		return false;
	}
	return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值