订单列表<;对象>;按照列表的顺序<;长期>;JAVA

订单列表<;对象>;按照列表的顺序<;长期>;JAVA,java,list,collections,Java,List,Collections,在阅读了几个问题和示例后,我附带了这个示例,我对其进行了一些修改,使其能够按预期工作 Collections.sort(listToOrder, Comparator.comparing(item -> someObject.getListOfLongs().indexOf(item.getId()))); listToOrder是一个MyObject的列表,它有名称和id,所以我需要按照与listToOrder相同的顺序对listToOrder进行排序 对于给定的代码示例,它可以按预期

在阅读了几个问题和示例后,我附带了这个示例,我对其进行了一些修改,使其能够按预期工作

Collections.sort(listToOrder, Comparator.comparing(item -> someObject.getListOfLongs().indexOf(item.getId())));
listToOrder是一个MyObject的列表,它有名称和id,所以我需要按照与listToOrder相同的顺序对listToOrder进行排序

对于给定的代码示例,它可以按预期工作,但是如果listToOrder的大小不同,它将失败,我想知道如何使它工作,即使大小不同

编辑:
我读错了,我得到的错误是一个IndexOutOfBoundsException,它不是由我放在那里的代码行触发的,这是因为一个手动日志。

这与排序无关,而是排序。具有具有完整参数构造函数和getter的以下对象:

public static class MyObject {
    private final long id;
    private final String name;
}
。。。以下数据以随机顺序排列

List<Integer> ids = Arrays.asList(5,4,7,0,2,1,3,8,6);
List<MyObject> list = Arrays.asList(
    new MyObject(1, "one"),
    new MyObject(3, "three"),
    ...
    new MyObject(6, "six"),
    new MyObject(8, "eight")
);
List id=Arrays.asList(5,4,7,0,2,1,3,8,6);
List=Arrays.asList(
新的MyObject(1,“一”),
新的MyObject(3,“三”),
...
新MyObject(6,“六”),
新MyObject(8,“八”)
);
您正在寻找的解决方案是:

List<MyObject> newList = new ArrayList<>(list);
for (int i=0; i<ids.size(); i++) {
   int id = ids.get(i);
   for (MyObject myObject: list) {
        if (myObject.getId() == id) {
            newList.set(i, myObject);
            break;
        }
    }
}
List newList=newarraylist(列表);
for(int i=0;i如果找不到元素,则返回
-1
,这意味着这些项将在结果排序列表中首先排序

在不排序数据的情况下,处理此类元素的唯一其他合理方法是将它们最后排序:

Collections.sort(listToOrder, Comparator.comparing(item -> someObject.getListOfLongs().contains(item.getId()) ? someObject.getListOfLongs().indexOf(item.getId()) : Integer.MAX_VALUE));

如果列表大小不同,你会期望得到什么结果?这可能意味着并非所有项目在有序列表中都有id,在这种情况下,你如何对它们进行排序?哈!这是我的错…正如@Bohemian所说,如果对象不存在,将返回-1,我遇到的问题是因为我从列表中打印了一个大小相同的日志s表示大小不同的listToOrder。最后是一个输入错误:P