排序数组对象的列表使用来自另一个数组的顺序列表

我有一个特殊顺序的“成员”数组:

ArrayList<Member> sortedMembers

我有另一个“成员”数组,可能包含也可能不包含第一个列表中的所有成员。

ArrayList<Member> unsortedMembers

为了判断第一个列表中的成员是否等于第二个列表中的成员,该类具有一个名为 的属性。MemberIntegermemberId

那么,我该如何以最有效的方法订购第二个列表呢?我真的希望尽最大努力,例如,如果第一个列表中不包含a,只需在第二个列表末尾附加成员即可。Member


拉丁的传说
浏览 106回答 1
1回答

噜噜哒

您需要在排序顺序列表中查找项目,然后,如果存在,则获取它们的索引并使用这些索引进行排序。排序列表.javaimport java.util.*;public class SortList {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; List<Member> list = Arrays.asList(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member( 1, "A"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member( 3, "C"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member(26, "Z"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member( 4, "D")&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; List<Member> order = Arrays.asList(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member(4, "D"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member(3, "C"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member(2, "B"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Member(1, "A")&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; sortBasedOn(list, order);&nbsp; &nbsp; &nbsp; &nbsp; list.stream().forEach(System.out::println);&nbsp; &nbsp; }&nbsp; &nbsp; public static <E> void sortBasedOn(List<E> toSort, List<E> ref, Comparator<E> comparator) {&nbsp; &nbsp; &nbsp; &nbsp; Collections.sort(toSort, comparator);&nbsp; &nbsp; }&nbsp; &nbsp; public static void sortBasedOn(List<Member> toSort, List<Member> ref) {&nbsp; &nbsp; &nbsp; &nbsp; sortBasedOn(toSort, ref, (left, right) -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Optional<Member> foundLeft = ref.stream().filter(x -> x.getMemberId() == left.getMemberId()).findFirst();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Optional<Member> foundRight = ref.stream().filter(x -> x.getMemberId() == right.getMemberId()).findFirst();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!foundLeft.isPresent()) return 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!foundRight.isPresent()) return -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return Integer.compare(ref.indexOf(foundLeft.get()), ref.indexOf(foundRight.get()));&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }}会员.javapublic static class Member {&nbsp; &nbsp; private int memberId;&nbsp; &nbsp; private String name;&nbsp; &nbsp; public Member(int memberId, String name) {&nbsp; &nbsp; &nbsp; &nbsp; this.memberId = memberId;&nbsp; &nbsp; &nbsp; &nbsp; this.name = name;&nbsp; &nbsp; }&nbsp; &nbsp; public int getMemberId() {&nbsp; &nbsp; &nbsp; &nbsp; return memberId;&nbsp; &nbsp; }&nbsp; &nbsp; public String getName() {&nbsp; &nbsp; &nbsp; &nbsp; return name;&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public String toString() {&nbsp; &nbsp; &nbsp; &nbsp; return String.format("Member [memberId=%s, name=%s]", memberId, name);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java