在工作中,我们都知道,如果循环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`过滤是一个常见的任务,它涉及到集合操作和条件判断。当我们需要从一个`List`中筛选出满足特定条件的元素时,Java提供了多种方式来实现这一功能。这篇博客“java list 过滤”可能深入探讨了这些...
在本案例中,我们讨论的主题是如何利用自定义注解实现过滤实例,特别是结合MySQL数据库进行操作。我们将探讨以下几个关键知识点: 1. **自定义注解的定义**: 自定义注解是以`@interface`关键字声明的。它们可以...
5. **Stream API**:Java 8引入的`Stream API`提供了一种新的遍历方式,支持链式操作,可以进行过滤、映射、聚合等操作,如`list.stream().forEach(System.out::println)`或`map.entrySet().stream().forEach(System...
在本实例“Listwidget控件实例1”中,我们将深入探讨`QListWidget`的使用方法,以及如何在实际应用中有效地利用它。 `QListWidget`是Qt库中的一个类,它继承自`QWidget`,并且实现了`QAbstractItemView`的接口。这...
在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...
这样,任何重复的元素都会被自动过滤掉。例如: ```python original_list = [1, 2, 3, 2, 1] unique_list = list(set(original_list)) print(unique_list) # 输出:[1, 2, 3] ``` 2. 使用list的append()和if...
实例将介绍如何使用LINQ语法进行数据过滤、排序和分组。 14. **异步编程**:C#的async/await关键字允许编写非阻塞代码,提高程序的响应性。实例将展示如何使用异步编程处理耗时操作。 15. **泛型**:泛型提供了一...
本文将深入探讨如何使用Python对字典进行过滤,并通过实例详细解释其工作原理。 首先,让我们回顾一下Python字典的基本操作。字典由一对大括号{}包围,内部包含若干个键值对,如`{'a': '0.0000', 'b': '1.2'}`。每...
本实例源码主要涉及了如何在ListView上实现A-Z字母排序以及过滤搜索功能,这对于构建一个用户友好的应用界面至关重要。以下是该实例所涵盖的关键知识点: 1. **ListView基本使用**:ListView是一个可滚动的列表视图...
5. **查询执行模式**:`Query Execution`讨论了何时以及如何执行LINQ查询,包括延迟执行和立即执行的差异,以及`ToList`、`ToArray`等方法如何触发执行。 6. **示例**:压缩包中的文件名可能对应着不同的LINQ操作...
相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。 布隆过滤器的工作原理 假设一个长度为m的bit类型的数组,即数组中每个位置只占一个bit,每个...
在三层架构中,可能需要将表现层接收到的用户输入(例如,一个用户选择的多个项目)以List的形式传递到业务逻辑层进行处理,然后业务逻辑层可能会对这些数据进行操作(如过滤、排序、计算等),最后将处理后的结果再...
// 获取CheckBoxList的实例 CheckBoxList chkOne = (CheckBoxList)FindControl("chkShipTypeAndEffect"); // 遍历并获取选中的项 for (int i = 0; i ; i++) { if (chkOne.Items[i].Selected) { string ...
当多个线程同时对`List`进行修改时,可能会抛出`ConcurrentModificationException`异常。为了解决这个问题,可以使用`CopyOnWriteArrayList`或者手动同步代码块。 ### 总结 本篇介绍的是Java中List的基本操作以及...
本文通过对 OSPF 路由表过滤和 LSA 过滤的总结,阐述了各种过滤方式的异同,并提供了一些常见的配置实例。通过本文,我们可以更好地理解 OSPF 协议,并更好地应用 OSPF 路由及 LSA 过滤来满足不同的网络需求。
在这个文件中,我们可以看到如何实例化敏感词过滤器,加载敏感词列表,然后对输入的文本进行过滤操作。 `Word.java`:这个文件可能是表示单个词的类,它可能包含了词的基本信息,如词本身、词的权重等。这个类可以...
在本主题中,我们将深入探讨四个重要的控件:Tab Control、List Control、ComboBox Control以及Tree Control,并通过SDK(Software Development Kit)的使用实例来阐述它们的功能、应用场景以及如何在实际开发中实施...
3. **上下文管理**:微过滤器提供了高效、安全的上下文管理机制,用于跟踪文件对象、流、文件实例和卷的状态。 4. **预操作和后操作回调**:预操作回调在操作执行前触发,后操作回调在操作完成后触发,这使得开发者...
Java 的产生是为了满足社会对信息快速传递和信息共享的需求。在互联网时代,科学家们需要一种专门的语言来实现一些特殊功能,于是 Java 产生了。 Java 的基本特性 1. 简单易学,容易上手 2. 面向对象,万事万物皆...
本文档将详细介绍Cisco路由器防火墙配置命令的使用方法和实例,包括清除访问列表规则的统计信息、启用或禁止防火墙、配置防火墙的缺省过滤方式、应用规则到接口上等内容。 一、清除访问列表规则的统计信息 clear ...