Java 使用Comparator结果按照另一个数组(不同长度)对数组进行排序,顺序错误

Java 使用Comparator结果按照另一个数组(不同长度)对数组进行排序,顺序错误,java,arrays,sorting,comparator,Java,Arrays,Sorting,Comparator,我需要根据另一个数组对一个数组进行排序,例如: 清单1:[221、54、50、138、125、145] 清单2:[50125] 那么排序后的列表1应该是:[5012522154138145] 我尝试了以下代码: Collections.sort(list1, Comparator.comparing(listItem -> list2.indexOf(listItem))); 但结果是:[221、54、138、145、50、125] 如何才能将50和125放在顶部,其余的放在后面?首先获

我需要根据另一个数组对一个数组进行排序,例如:

清单1:[221、54、50、138、125、145]

清单2:[50125]

那么排序后的列表1应该是:[5012522154138145]

我尝试了以下代码:

Collections.sort(list1, Comparator.comparing(listItem -> list2.indexOf(listItem)));
但结果是:[221、54、138、145、50、125]


如何才能将50和125放在顶部,其余的放在后面?

首先获取
list1
项的原因是
list2
中不存在的元素的索引返回为
-1
,因此它们被放在第一位。您所需要做的只是颠倒顺序,如下所示:

list2.sort(Comparator.reverseOrder());
Collections.sort(list1, Comparator.comparing(listItem -> list2.indexOf(listItem)).reversed());
请注意,在应用
反向
之前,需要按反向顺序对
列表2
进行排序。如果不想更改排序或
list2
,可以克隆
list2
,并将其与
Comparator
一起使用

演示:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>(List.of(221, 54, 50, 138, 125, 145));
        List<Integer> list2 = new ArrayList<>(List.of(50, 125));

        // Clone list2
        List<Integer> list2Clone = new ArrayList<>(list2);
        // Sort the cloned list in reverse order
        list2Clone.sort(Comparator.reverseOrder());

        // Sort list1
        Collections.sort(list1, Comparator.comparing(listItem -> list2Clone.indexOf(listItem)).reversed());

        // Display the result
        System.out.println(list1);
    }
}
[50, 125, 221, 54, 138, 145]

list1
元素不包含在
list2
中时,则
indexOf
返回
-1
,这就是为什么这些值首先出现的原因。因此,对于这些值,请使用
list1.size()
,然后这些值将稍后出现

Collections.sort(list1, Comparator.comparing(listItem -> list2.contains(listItem) ? list2.indexOf(listItem): list1.size()));

非常感谢,我似乎需要跟进,我将上面的示例设置为通用,但在我的应用程序中,我需要对对象数组和我的旧代码进行排序:
Collections.sort(roomset,Comparator.comparating(room->list.indexOf(room.getId()))工作(导致顺序相反)。但是在添加reversed()函数时,这里有
Collections.sort(roomset,Comparator.comparating(room->list.indexOf(room.getId()).reversed()),它突然无法解析该方法。(Id为字符串)。请让我知道,如果你有一个想法,为什么对象的行为是这样的添加反转function@JohnMarkson-我正忙于一些会议,会议结束后我会研究新的要求。只是想确认新的需求:解决方案适用于数字,但您需要一个可以适用于任何类型对象(例如字符串或某个类的对象)的解决方案-这是对您的需求的正确理解吗?也许你可以发布一个新问题以获得更快的响应,这样其他贡献者可以发布一些解决方案,然后我可以在会议结束后再进行研究。哦,感谢你在忙的时候做出响应,但我使用了本文中的另一个答案,另一个用户建议使用三元运算符为List2中不存在的项指定一个高索引值,这太棒了!祝你成功!非常感谢您的回答,我已经把这个问题变成了一般性的问题,但这甚至适用于对数组对象进行排序。