我有两个列表 list1
和 list2
如下图
现在我想根据 list2 对 list1 进行排序。
list1
中的元素如果不在list2
将在顶部,如果该元素存在于 list2
中那么它应该与 list2
的顺序相同.
所以我希望结果表是这样的。
我有下面的代码来执行此操作,并且可以正常工作。我真的不确定这是否会在某些情况下中断,或者是否有更好的方法来实现:
List<Employee> list = new ArrayList<>();
list.add(new Employee("Tony",123));
list.add(new Employee("Mark",123));
list.add(new Employee("Steve",123));
list.add(new Employee("David",123));
list.add(new Employee("John",123));
list.add(new Employee("Jim",123));
List<Person> list2 = new ArrayList<>();
list2.add(new Employee("David",123));
list2.add(new Employee("Steve",123));
list2.add(new Employee("Mark",123));
List<Person> newList = new ArrayList<>();
list2.forEach(e->{
if(list.stream().filter(doc->e.getName().equalsIgnoreCase(doc.getName())).findAny().isPresent()){
newList.add(e);
list.removeIf(i->i.getName().equalsIgnoreCase(e.getName()));
}
});
list.addAll(newList);
System.out.println(list);
}
最佳答案
注意:Employee
需要有一个equals
和hashCode
,这样list::contains
才能工作.
先找出list1中所有不在list2中的元素。
list3 = list1.stream()
.filter(Predicate.not(list2::contains))
.collect(Collectors.toList());
那么,如果
- list2 中没有NOT属于
list1
的元素。在这种情况下,只需将 list2 的所有元素添加到 list1 即可
list3.addAll(list2);
- list2 中的某些元素可能/可能不在 list1 中。将 list2 中 list1 中的元素添加到 list3。
list3.addAll(list2.stream().filter(list1::contains).collect(Collectors.toList()));
关于java - 根据另一个列表 Java 对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68204467/