如何从对象列表中删除少量对象

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 中另一个列表中的对象中添加和删除列表中的对象

是否可以将一个对象从一个片段发送到另一个片段?

即使对于少量数据,将先验对象转换为列表也需要更多时间

将对象列表从片段传递到 recyclerView 适配器

如何使用对象列表在片段中实现newinstace模式[重复]

从颤动的其他对象列表中删除对象列表