我确实有两个java.util.List,例如看起来像这样:
List<MyObject> myObjects = ...
MyObject myObject1 = ...
MyObject myObject2 = ...
MyObject myObject3 = ...
MyObject myObject4 = ...
MyObject myObject5 = ...
myObjects.add(myObjet1);
...
第二个List看起来像这样:
List<MyObject> otherListObjects = ...
MyObject myObject1 = ...
MyObject myObject5 = ...
现在,我的目标是要有一个列表,其中myObject1和myObject5位于前两个位置,而不是其他位置。
在Java 8中是否可以执行此操作?
最佳答案
您可以根据myObjects
中出现在myOtherObjects
中的索引对它们进行排序:
myObjects.sort(Comparator.comparingInt(s -> {
int ind = myOtherObjects.indexOf(s);
if (ind >= 0) {
return ind;
}
return Integer.MAX_VALUE;
}));
马尔特·哈特维格(Malte Hartwig)提出了一个很酷的变体。它利用Java的整数算术下溢,因此,如果在
myOtherObjects
中找不到该对象,则将-1
添加到Integer.MIN_VALUE
将会下溢并产生2147483647
:myObjects.sort(
Comparator.comparingInt(s -> myOtherObjects.indexOf(s) + Integer.MIN_VALUE));
如果您不关心
myOtherObjects
内部的内部顺序,则可以大大简化此操作:myObjects.sort(Comparator.comparing(myOtherObjects::contains).reversed());