qum*_*uma 1 java sorting java-8
我有两个java.util.List,例如如下所示:
List<MyObject> myObjects = ...
MyObject myObject1 = ...
MyObject myObject2 = ...
MyObject myObject3 = ...
MyObject myObject4 = ...
MyObject myObject5 = ...
myObjects.add(myObjet1);
...
Run Code Online (Sandbox Code Playgroud)
第二个List看起来像这样:
List<MyObject> otherListObjects = ...
MyObject myObject1 = ...
MyObject myObject5 = ...
Run Code Online (Sandbox Code Playgroud)
现在我的目标是有一个列表,其中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;
}));
Run Code Online (Sandbox Code Playgroud)
Malte Hartwig提出了一个很酷的变种.它利用Java的整数运算下溢,因此,如果对象中找不到myOtherObjects,加入-1到Integer.MIN_VALUE下溢,并产生2147483647:
myObjects.sort(
Comparator.comparingInt(s -> myOtherObjects.indexOf(s) + Integer.MIN_VALUE));
Run Code Online (Sandbox Code Playgroud)
如果你不关心里面的内部订单myOtherObjects,这可以大大简化:
myObjects.sort(Comparator.comparing(myOtherObjects::contains).reversed());
Run Code Online (Sandbox Code Playgroud)