java – 基于可配置顺序的比较器

前端之家收集整理的这篇文章主要介绍了java – 基于可配置顺序的比较器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法写自定义比较器,下面这个例子:

最多有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]

猜你在找的Java相关文章