对List的过滤刷选实例

        在工作中,我们都知道,如果循环List的循环体中有remove操作,将抛出java.util.ConcurrentModificationException异常。

        面对这种操作,有如下两种方法来处理:

        1.通过新建一个结果List<UserDTO>保存处理后的数据

        2.用两个变量在一个循环中处理

实例代码:

ListDemo.java

package com.bijian.study;

import java.util.ArrayList;
import java.util.List;

/**
 * 对List的刷选实例
 */
public class ListDemo {

	public static void main(String[] args) {
		
		List<UserDTO> userList = new ArrayList<UserDTO>();
		
		UserDTO userDTO1 = new UserDTO("zhangshan", "123");
		UserDTO userDTO2 = new UserDTO("lisi", "123456");
		UserDTO userDTO3 = new UserDTO("wangwu", "1236");
		UserDTO userDTO4 = new UserDTO("zhaoliu", "123");
		UserDTO userDTO5 = new UserDTO("diandian", "123");
		
		userList.add(userDTO1);
		userList.add(userDTO2);
		userList.add(userDTO3);
		userList.add(userDTO4);
		userList.add(userDTO5);
		
		ListDemo listDemo = new ListDemo();
		List<UserDTO> resultList = listDemo.listProcess(userList);
		for(UserDTO userDTO : resultList) {
			System.out.println(userDTO);
		}
	}
	
	/**
	 * Exception in thread "main" java.util.ConcurrentModificationException
		at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
		at java.util.AbstractList$Itr.next(Unknown Source)
		at com.bijian.study.ListDemo.listProcess(ListDemo.java:32)
		at com.bijian.study.ListDemo.main(ListDemo.java:25)
	 * @param userList
	 * @return
	 */
//	public List<UserDTO> listProcess(List<UserDTO> userList) {
//		for(UserDTO userDTO : userList) {
//			if(userDTO.getPassword().equals("123")) {
//				userList.remove(userDTO);
//			}
//		}
//		return userList;
//	}
	
	/**
	 * 通过新建一个结果List<UserDTO>保存处理后的数据
	 * @param userList
	 * @return
	 */
//	public List<UserDTO> listProcess(List<UserDTO> userList) {
//		
//		List<UserDTO> resultList = new ArrayList<UserDTO>();
//		for(UserDTO userDTO : userList) {
//			if(!userDTO.getPassword().equals("123")) {
//				resultList.add(userDTO);
//			}
//		}
//		return resultList;
//	}
	
	/**
	 * 用两个变量在一个循环中处理
	 * i:用来控制循环
	 * j:用来从List中获取元素
	 * @param userList
	 * @return
	 */
	public List<UserDTO> listProcess(List<UserDTO> userList) {
		
		for (int i = 0, length = userList.size(), j = 0; i < length; i++) {
            UserDTO userDTO = userList.get(j);
            String password = userDTO.getPassword();
            if ("123".equals(password)) {
            	userList.remove(j);
            } else {
                j++;
            }
        }
		return userList;
	}
}

UserDTO.java

package com.bijian.study;

public class UserDTO {

	private String name;
	private String password;
	
	public UserDTO(String name, String password) {
		this.name = name;
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "UserDTO [name=" + name + ", password=" + password + "]";
	}
}

运行结果:

UserDTO [name=lisi, password=123456]
UserDTO [name=wangwu, password=1236]

猜你喜欢

转载自bijian1013.iteye.com/blog/2262437