使用自定义Comparator和映射(Map)
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class SortWithExtraData {
static class Item {
String code;
// 其他属性...
public Item(String code) {
this.code = code;
}
@Override
public String toString() {
return "Item{" + "code='" + code + '\'' + '}';
}
}
public static void main(String[] args) {
List<Item> list1 = Arrays.asList(new Item("A"), new Item("B"), new Item("C"));
List<Item> list2 = Arrays.asList(new Item("C"), new Item("A"), new Item("B"), new Item("D"), new Item("E"));
// 将list1的code映射到它的索引
Map<String, Integer> orderMap = IntStream.range(0, list1.size())
.boxed()
.collect(Collectors.toMap(i -> list1.get(i).code, i -> i));
// 在Comparator中排序list2,未找到的code赋予最大值
list2.sort(Comparator.comparingInt(item -> orderMap.getOrDefault(item.code, Integer.MAX_VALUE)));
list2.forEach(System.out::println);
}
}