根据另一个列表中的条件删除一个列表中的某些元素

Sri*_*man 5 java foreach lambda stream java-8

我是Java8的新手.我需要根据某些标准(来自另一个列表)在一个列表中减去/删除POJO并在UI上显示它.

迭代一个列表并搜索条件删除对象将原始列表发送到UI

Children.java
private String firstName;
private String lastName;
private String school;
private String personId;
// Setters and getters.

Person.java
private String personId;
private String fullName;
private String address;
// Setters and Getters.
Run Code Online (Sandbox Code Playgroud)

..主要代码..

  // populated by other methods.
  List<Person> personList;

 //Connect to DB and get ChildrenList
 List<Children> childrenList = criteria.list();

 for(Children child : childrenList) {
    personList.removeIf(person -> child.getPersonId().equals(person.getPersonId()));
 }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理循环?任何帮助表示赞赏.

Jac*_* G. 7

你现在所拥有的代码工作完美,但也O(n * m)因为removeIf通过迭代List的每一个Children.改进的一种方法是将每个孩子存放personId在a中Set<String>,并将其中的每个移除Person,List<Person>如果它们personId包含在Set:

Set<String> childIds = childrenList.stream()
                                   .map(Children::getPersonId)
                                   .collect(Collectors.toSet());

personList.removeIf(person -> childIds.contains(person.getPersonId()));
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的答复.此代码运行得更快. (2认同)