如何从对象列表中删除少量对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从对象列表中删除少量对象相关的知识,希望对你有一定的参考价值。
假设我有一个Employee对象列表,每个Employee Class都有employeeName,employeeAddress,salary等属性。现在我必须删除名为“John”和Salary> 40000的Employee对象。
列表empList = new ArrayList <>(); //将数百万名员工添加到empList。
根据我的理解,删除具有上述条件的员工,我应该使用以下代码:
Iterator<Employee> iterator = list.iterator();
while (iterator.hasNext()) {
Employee employee = iterator.next();
if ("John".equals(employee.getName) && employee.getSalary>40000) {
iterator .remove();
}
}
所以基本上上面的代码将从列表中删除所需的Employee对象。如果我的理解是正确的,请告诉我。
除此之外,请澄清以下内容:1。当我们有数百万条记录时,我们将如何解决这个问题。 2. iterator.remove()和list.remove()之间的区别
提前致谢。
1)如果你想保持物体存活,你只能过滤所需的物体
list.stream()
.filter(emp->"John".equals(emp.getName()) && emp.getSlaray() >40000)
.collect(Collectors.toList());
2)如果你正在迭代一个集合并使用:
Collection.remove()
特别引发ConcurrentModifcationException导致更改先前使用的对象的状态以构造完成循环所必需的显式调用系列,当您使用时
Iterator.remove()
您更改基础集合并重新评估完成循环所需的显式系列调用。
一次装入数百万个对象并不好。你怎么得到所有这些记录?如果从数据库中读取它们,最好使用SQL进行过滤。
where e.name = "John" and e.salary > 40000
如果你从文件中读取它们,你不应该一次读取它们,也就是数据库。您可以将记录提取到1000个批次。
如果你像上面那样实现它,你也可以使用流:
List<Employee> filteredList = list.stream()
.filter(employee -> employee.getName().equals("John"))
.filter(employee.getSlaray() > 40000)
.collect(Collectors.toList());
然后你可以拥有1000行的过滤列表并将它们分开处理。
以上是关于如何从对象列表中删除少量对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SwiftUI 和 Realm 中另一个列表中的对象中添加和删除列表中的对象