有如下一个待排序的列表:
"吕布", "大乔", "诸葛亮", "孙权", "曹操", "周瑜", "刘备", "貂蝉", "小乔"
需要我们按照下方给定的顺序进行排序,如果人名不在下方列表中,则排在最后。
"曹操", "刘备", "孙权", "诸葛亮", "周瑜"
思路:获取待排序对象在给定排序列表中的index,通过index进行排序。
具体实现参考代码:
public class CustomSortTest {
public static void main(String[] args) {
//自定义排序规则
List<String> customSort = Arrays.asList("曹操", "刘备", "孙权", "诸葛亮", "周瑜");
//需要排序的姓名列表
List<String> nameList = Arrays.asList("吕布", "大乔", "诸葛亮", "孙权", "曹操", "周瑜", "刘备", "貂蝉", "小乔");
//进行排序
//说明:
// 1、获取o1和o2对象在自定义排序规则customSort中的索引index,之后按照index进行排序。
// 2、需要o对象有不在customSort中的情况,默认不在的排在最后,即index认为等于Integer.MAX_VALUE
nameList.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int i1 = customSort.indexOf(o1);
i1 = i1 == -1 ? Integer.MAX_VALUE : i1;
int i2 = customSort.indexOf(o2);
i2 = i2 == -1 ? Integer.MAX_VALUE : i2;
return i1 - i2;
}
});
//打印排序结果
StringBuilder sb = new StringBuilder();
for (String name : nameList) {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(name);
}
System.out.println(sb.toString());
}
}
结果:
曹操,刘备,孙权,诸葛亮,周瑜,吕布,大乔,貂蝉,小乔