有一个List<CommonDictionary>,
CommonDictionary的结构:
/** * 主键id */ private Long id; /** * 组id */ private String groupId; /** * 键<br />不能取值为key,因为key是关键字 */ private String key2; /** * 值 */ private String value; /** * 描述 */ private String description;
我需要对key2进行排序.
说明:
(1)key2的值是唯一的,不重复;
(2)key2的所有取值都已知.
按照什么方式排序呢?
"company_n","product_stand","production_no","registration_c","production_addr","company_web"
排序前:
13company_name武汉市
17company_website公司网址
14product_standard产品标准aa
18production_address生产地址
15production_no生产证号
16registration_certificate_number注册证号drfdf
---------------------------------
排序后:
13company_name武汉市
14product_standard产品标准aa
15production_no生产证号
16registration_certificate_number注册证号drfdf
18production_address生产地址
17company_website公司网址
测试方法如下:
@Test public void tst_77(){ List<CommonDictionary> list=DictionaryParam.getList(Constant2.DICTIONARY_GROUP_ANTICOUNTERFEIT_CODE); String orderTitles[]=new String[]{"company_n","product_stand","production_no","registration_c","production_addr","company_web"}; for(int i=0;i<list.size();i++){ CommonDictionary commonDictionary33=list.get(i); System.out.println(commonDictionary33.getId()+"\t"+commonDictionary33.getKey2()+"\t"+commonDictionary33.getValue()); } Collections.sort(list,new SystemHWUtil. ArrayListComparator(orderTitles,"Key2")); System.out.println("---------------------------------"); for(int i=0;i<list.size();i++){ CommonDictionary commonDictionary33=list.get(i); System.out.println(commonDictionary33.getId()+"\t"+commonDictionary33.getKey2()+"\t"+commonDictionary33.getValue()); } }
执行结果:
SystemHWUtil. ArrayListComparator 实现如下:
public static class ArrayListComparator implements Comparator{ /*** * 排序的依据 */ private String titles[]; /*** * 对哪个列进行排序 */ private String comparedProperty; public ArrayListComparator(String[] titles,String comparedProperty) { super(); this.titles = titles; this.comparedProperty=comparedProperty; } public int compare(Object o1, Object o2) { if(null!=o1&&null!=o2) { try { if(SystemHWUtil.indexOfArr(titles,(String)ReflectHWUtils.getObjectValue(o1, comparedProperty) ) > SystemHWUtil.indexOfArr(titles,(String)ReflectHWUtils.getObjectValue(o2, comparedProperty))){ return 1/*大于*/; }else { return -1/*小于*/; } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return 0/*等于*/; } }
SystemHWUtil.indexOfArr 参考http://hw1287789687.iteye.com/blog/2145187
注意:
(1)titles中的元素不要有重复;
(2)ArrayListComparator 可应用于所有的Object,应该它没有与具体的类关联,而是通过反射来获取成员变量的值.
关于反射,可以参阅:http://hw1287789687.iteye.com/blog/2124280
遗留问题:
如何高效率地过滤String[]:{1,2,3,2}-->{1,2,3};
相关源码见附件
相关推荐
谭浩强教授,我国著名计算机教育专家。1934年生。1958年清华大学毕业。学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一...8.4 对象成员的引用 8.4.1 通过对象名...
谭浩强教授,我国著名计算机教育专家。1934年生。1958年清华大学毕业。学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一...8.4 对象成员的引用 8.4.1 通过对象名...
对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...
5.6 类的对象作为成员 5.7 类的数组 5.8 成员指针 5.9 常微分方程的数值解法 5.10 练习 第6章 运算符重载 6.1 复数 6.1.1 初始化 6.1.2 缺省拷贝构造和赋值 6.1.3 转换和混合模式运算 6.2 ...
SortAttribute.java:排序注解,标示成员变量为排序字段 TableAttribute.java:数据表注解,标示实体类对应的表名称、说明信息 provider:Sql 语句生成相关 BaseCreateProvider.java:数据表创建语句的生成器,...
87 5.3 数组操作的举例 88 5.3.1 数组元素值的复制 88 5.3.2 数组元素的排序 90 5.3.3 在数组里查找指定元素 91 5.3.4 利用数组打印26个英文字母 92 5.4 综合练习 93 5.5 小结 94 5.6 习题 94 第二篇 面向对象篇 第6...
2.3.1 继承成员变量和继承方法的区别 2.3.2 内存中子类实例 2.3.3 父、子类的类变量 2.4 final修饰符 2.4.1 final修饰的变量 2.4.2 执行"宏替换"的变量 2.4.3 final方法不能被重写 2.4.4 内部类中的局部变量...
7.2 const(常量)对象与const成员函数 7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:...
接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...
05.使用下划线初始化成员变量 06.定义和访问成员方法 07.访问权限修饰符 08.主构造器 09.辅助构造器 10.定义单例对象 11,在单例对象中定义方法 12.如何定义程序的主入口 13.定义伴生对象 14.private[this]...
6.6.1 调用不存在的方法或成员变量 87 6.6.2 用空引用进行调用 88 6.6.3 数组的空引用问题 89 6.7 局部变量 89 6.7.1 局部变量的作用域 89 6.7.2 局部变量的初始化 90 6.8 this预定义对象引用 92 6.9...
7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 类内部的内联函数 145 8.2.2 ...
5.3.2 成员变量的初始化和内存中的运行机制 128 5.3.3 局部变量的初始化和内存中的运行机制 130 5.3.4 变量的使用规则 130 5.4 隐藏和封装 132 5.4.1 理解封装 132 5.4.2 使用访问控制符 132 5.4.3 package和...
3.3.3实例成员变量和静态成员变量114 3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2创建方法体与return语句117 3.4.3局部变量和成员变量的区别119 3.4.4方法的访问权限121 3.5方法的调用121 3.5.1方法...
7.2 const(常量)对象与const成员函数 7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:...
接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...
搜寻中可以在list中搜索与指定谓词或指定成员(变量或方法)的匹配项。 搜索将使迭代器返回第一个找到的匹配项,如果没有找到匹配项,则返回end() 。 以下两个表达式是等效的: myList.search(match, &ObjectType::...