Remove certain elements in one list based on condition from another list
我对Java8还比较陌生。我需要根据某些条件(从另一个列表中)在一个列表中减去/删除POJO,并将其显示在UI上。
迭代一个列表并搜索条件移除对象将原始列表发送到UI
1 2 3 4 5 6 7 8 9 10 11 12 |
..主代码…
1 2 3 4 5 6 7 8 9 | // 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())); } |
有没有更好的方法来处理循环?感谢您的帮助。
您现在拥有的代码工作得很好,但也是
1 2 3 4 5 | Set<String> childIds = childrenList.stream() .map(Children::getPersonId) .collect(Collectors.toSet()); personList.removeIf(person -> childIds.contains(person.getPersonId())); |
只是做同样的事情的另一种方法,但不改变原始列表:
1 2 3 4 5 6 7 | Set<String> childIds = childrenList.stream() .map(Children::getPersonId) .collect(Collectors.toSet()); personList = personList.stream().filter(person -> !childIds.contains(person.getPersonId()) ).collect(Collectors.toList()); |
它应该会增加一些空间复杂性,但是您可以在这里利用