java – 基于可配置顺序的比较器
发布时间:2020-05-24 17:22:28 所属栏目:Java 来源:互联网
导读:有没有办法写自定义比较器,下面这个例子: 最多有10个项目以随机顺序进入 即 first item: item_onesecond: second_onethird: third_one 我想要使它们排序像:second_one,third_one,first_one.我想从配置文件中提取这个顺序,就像用于排序的模板一样. 我使用错
|
有没有办法写自定义比较器,下面这个例子: 最多有10个项目以随机顺序进入 first item: item_one second: second_one third: third_one 我想要使它们排序像:second_one,third_one,first_one.我想从配置文件中提取这个顺序,就像用于排序的模板一样. 我使用错误的数据结构,有没有人有这方面的经验? 解决方法当然.这是一个“OrderedComparator”,它根据预定义的顺序对元素进行比较:class OrderedComparator implements Comparator<String> {
List<String> predefinedOrder;
public OrderedComparator(String[] predefinedOrder) {
this.predefinedOrder = Arrays.asList(predefinedOrder);
}
@Override
public int compare(String o1,String o2) {
return predefinedOrder.indexOf(o1) - predefinedOrder.indexOf(o2);
}
}
这里是一些测试代码. (我使用一个List而不是一个Set,因为它1)在讨论元素的顺序时看起来更自然,2)更好地说明在使用此比较器进行排序时重复元素会发生什么.) class Test {
public static void main(String[] args) {
// Order (could be read from config file)
String[] order = { "lorem","ipsum","dolor","sit" };
List<String> someList = new ArrayList<String>();
// Insert elements in random order.
someList.add("sit");
someList.add("ipsum");
someList.add("sit");
someList.add("lorem");
someList.add("dolor");
someList.add("lorem");
someList.add("ipsum");
someList.add("lorem");
System.out.println(someList);
Collections.sort(someList,new OrderedComparator(order));
System.out.println(someList);
}
}
输出: [sit,ipsum,sit,lorem,dolor,lorem] [lorem,sit] (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
