`

对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]
分享到:
评论

相关推荐

    java list 过滤

    在Java编程中,`List`过滤是一个常见的任务,它涉及到集合操作和条件判断。当我们需要从一个`List`中筛选出满足特定条件的元素时,Java提供了多种方式来实现这一功能。这篇博客“java list 过滤”可能深入探讨了这些...

    自定义注解实现过滤实例

    在本案例中,我们讨论的主题是如何利用自定义注解实现过滤实例,特别是结合MySQL数据库进行操作。我们将探讨以下几个关键知识点: 1. **自定义注解的定义**: 自定义注解是以`@interface`关键字声明的。它们可以...

    list map相关用法实例-流氓版

    5. **Stream API**:Java 8引入的`Stream API`提供了一种新的遍历方式,支持链式操作,可以进行过滤、映射、聚合等操作,如`list.stream().forEach(System.out::println)`或`map.entrySet().stream().forEach(System...

    Listwidget控件实例1

    在本实例“Listwidget控件实例1”中,我们将深入探讨`QListWidget`的使用方法,以及如何在实际应用中有效地利用它。 `QListWidget`是Qt库中的一个类,它继承自`QWidget`,并且实现了`QAbstractItemView`的接口。这...

    Java对List多个排序、查询条件的处理

    在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...

    (实例034)List列表拒绝添加重复信息.rar

    这样,任何重复的元素都会被自动过滤掉。例如: ```python original_list = [1, 2, 3, 2, 1] unique_list = list(set(original_list)) print(unique_list) # 输出:[1, 2, 3] ``` 2. 使用list的append()和if...

    C#程序设计实例(C#基础实例)

    实例将介绍如何使用LINQ语法进行数据过滤、排序和分组。 14. **异步编程**:C#的async/await关键字允许编写非阻塞代码,提高程序的响应性。实例将展示如何使用异步编程处理耗时操作。 15. **泛型**:泛型提供了一...

    对python字典过滤条件的实例详解

    本文将深入探讨如何使用Python对字典进行过滤,并通过实例详细解释其工作原理。 首先,让我们回顾一下Python字典的基本操作。字典由一对大括号{}包围,内部包含若干个键值对,如`{'a': '0.0000', 'b': '1.2'}`。每...

    基于Android实现ListView的A-Z字母排序和过滤搜索功能完整实例源码.zip

    本实例源码主要涉及了如何在ListView上实现A-Z字母排序以及过滤搜索功能,这对于构建一个用户友好的应用界面至关重要。以下是该实例所涵盖的关键知识点: 1. **ListView基本使用**:ListView是一个可滚动的列表视图...

    linq实例-基本操作实例

    5. **查询执行模式**:`Query Execution`讨论了何时以及如何执行LINQ查询,包括延迟执行和立即执行的差异,以及`ToList`、`ToArray`等方法如何触发执行。 6. **示例**:压缩包中的文件名可能对应着不同的LINQ操作...

    通过实例解析布隆过滤器工作原理及实例

    相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。 布隆过滤器的工作原理 假设一个长度为m的bit类型的数组,即数组中每个位置只占一个bit,每个...

    北大青鸟ACCP5.0 S2 三层架构 List层间数据传递代码实例

    在三层架构中,可能需要将表现层接收到的用户输入(例如,一个用户选择的多个项目)以List的形式传递到业务逻辑层进行处理,然后业务逻辑层可能会对这些数据进行操作(如过滤、排序、计算等),最后将处理后的结果再...

    CheckBoxList的用法

    // 获取CheckBoxList的实例 CheckBoxList chkOne = (CheckBoxList)FindControl("chkShipTypeAndEffect"); // 遍历并获取选中的项 for (int i = 0; i ; i++) { if (chkOne.Items[i].Selected) { string ...

    java的list取之方法

    当多个线程同时对`List`进行修改时,可能会抛出`ConcurrentModificationException`异常。为了解决这个问题,可以使用`CopyOnWriteArrayList`或者手动同步代码块。 ### 总结 本篇介绍的是Java中List的基本操作以及...

    OSPF路由及LSA过滤总结

    本文通过对 OSPF 路由表过滤和 LSA 过滤的总结,阐述了各种过滤方式的异同,并提供了一些常见的配置实例。通过本文,我们可以更好地理解 OSPF 协议,并更好地应用 OSPF 路由及 LSA 过滤来满足不同的网络需求。

    java敏感词过滤功能

    在这个文件中,我们可以看到如何实例化敏感词过滤器,加载敏感词列表,然后对输入的文本进行过滤操作。 `Word.java`:这个文件可能是表示单个词的类,它可能包含了词的基本信息,如词本身、词的权重等。这个类可以...

    Tab Control List Control Combo box Control Tree Control SDK的使用实例

    在本主题中,我们将深入探讨四个重要的控件:Tab Control、List Control、ComboBox Control以及Tree Control,并通过SDK(Software Development Kit)的使用实例来阐述它们的功能、应用场景以及如何在实际开发中实施...

    微过滤器开发指南文档

    3. **上下文管理**:微过滤器提供了高效、安全的上下文管理机制,用于跟踪文件对象、流、文件实例和卷的状态。 4. **预操作和后操作回调**:预操作回调在操作执行前触发,后操作回调在操作完成后触发,这使得开发者...

    java-0126递归&过滤器(listFiter)&InputStream&OutputStream

    Java 的产生是为了满足社会对信息快速传递和信息共享的需求。在互联网时代,科学家们需要一种专门的语言来实现一些特殊功能,于是 Java 产生了。 Java 的基本特性 1. 简单易学,容易上手 2. 面向对象,万事万物皆...

    Cisco路由器防火墙配置命令及实例.pdf

    本文档将详细介绍Cisco路由器防火墙配置命令的使用方法和实例,包括清除访问列表规则的统计信息、启用或禁止防火墙、配置防火墙的缺省过滤方式、应用规则到接口上等内容。 一、清除访问列表规则的统计信息 clear ...

Global site tag (gtag.js) - Google Analytics