首页 > 代码库 > java比较器的复用
java比较器的复用
博客主页:http://blog.csdn.net/minna_d
设想这么一种场景:A有N个字段,也有专门对A的比较函数。每一次比较函数,在N多个业务线复用。
那么,问题来了, 突然有一天A多加了一个字段in,而且在原一特定场景中这个字段比其它所有字段的优先级都应该高。在其它场景中又没有影响。
该怎么解决这个问题?
1. 重写原有的所有的Comparator类,重写它们的compare方法。这种方法代价太大,因为N多地方需要 if...else
2. 只正对特定场景新增一个组合之前的comparator的方法。
如果有一种Collections.sort(aList, Lists.newArraryList(c1, c2, c3))这样的数据结构,那么问题就迎刃而解了(其实自己写一个也很简单)。
不过没有找到,无意之中在apache.commons.collections 找到了一个可以完全替代他的类。ComparatorChain,内部也是用一个链表保存所有排序器
C1、C2都可以当做是以往就使用的排序器
static class A { Integer n1; Integer n2; A(Integer n1, Integer n2) { this.n1 = n1; this.n2 = n2; } @Override public String toString() { return "A{" + "n1=" + n1 + ", n2=" + n2 + '}'; } } public static void main(String[] args) { List<Integer> data = http://www.mamicode.com/Lists.newArrayList(3, 1, 3, 1, 3, 2, 4, 2, 2, 2, 2, 4, 4, 2, 3, 1, 3, 4, 1, 2);>
java比较器的复用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。