`

按照指定对象的成员变量排序

    博客分类:
  • Java
阅读更多

有一个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};

相关源码见附件

  • 大小: 44.7 KB
  • 大小: 38.6 KB
1
0
分享到:
评论

相关推荐

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    谭浩强教授,我国著名计算机教育专家。1934年生。1958年清华大学毕业。学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一...8.4 对象成员的引用 8.4.1 通过对象名...

    编写一个使用类模板对数组进行排序.pdf

    该类模板中定义了五个成员函数:构造函数、析构函数、下标运算符、搜索函数和排序函数。 在构造函数中,我们申请了一个数组a,并将其长度设置为size。同时,我们还初始化了数组的所有元素为0。 下标运算符的实现是...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    谭浩强教授,我国著名计算机教育专家。1934年生。1958年清华大学毕业。学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一...8.4 对象成员的引用 8.4.1 通过对象名...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    C++和面向对象数值计算

    5.6 类的对象作为成员 5.7 类的数组 5.8 成员指针 5.9 常微分方程的数值解法 5.10 练习 第6章 运算符重载 6.1 复数 6.1.1 初始化 6.1.2 缺省拷贝构造和赋值 6.1.3 转换和混合模式运算 6.2 ...

    java并发编程实践笔记资料.pdf

    17. 单一不可变对象往往是线程安全的,但是复杂不可变对象需要保证其内部成员变量也是不可变的。 18. 良好的多线程编程习惯是:将所有的域都声明为final,除非它们是可变的。 19. 保证共享变量的发布是安全的,...

    kellerMapper.jar

    SortAttribute.java:排序注解,标示成员变量为排序字段 TableAttribute.java:数据表注解,标示实体类对应的表名称、说明信息 provider:Sql 语句生成相关 BaseCreateProvider.java:数据表创建语句的生成器,...

    C期末考试试题(卷)..doc

    在类的成员中,用于存储属性值的是成员变量,答案是成员变量。 10. 派生类 在C#中,定义派生类时,指定其基类应使用的语句是:,答案是B。 11. 类的特性 类的以下特性中,可以用于方便地重用已有的代码和数据的...

    21天学通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...

    突破程序员基本功的16课.part2

    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 内部类中的局部变量...

    超级有影响力霸气的Java面试题大全文档

    接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...

    C#试题汇总有答案.doc

    9. 在类的成员中,用于存储属性值的是成员变量。 知识点:类的成员变量 10. 在 C#中,定义派生类时,指定其基类应使用的语句是:。 知识点:继承 11. 类的以下特性中,可以用于方便地重用已有的代码和数据的是...

    C++大学教程,一本适合初学者的入门教材(part1)

    7.2 const(常量)对象与const成员函数 7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:...

    scala从入门到精通技术教学视频

    05.使用下划线初始化成员变量 06.定义和访问成员方法 07.访问权限修饰符 08.主构造器 09.辅助构造器 10.定义单例对象 11,在单例对象中定义方法 12.如何定义程序的主入口 13.定义伴生对象 14.private[this]...

    day12_Object类、常用API.pdf

    实际应用中,比较内存地址是否相同并没有意义,我们可以定义对象自己的比较方式,比较对象中成员变量的值是否相同。 在Java语言中,还有一个非常重要的类, Đó làDate类。Date类表示特定的瞬间,精确到毫秒。...

    javaSE代码实例

    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...

    asp.net c#基本语法

    在 C# 中,变量声明需要明确指定变量的类型。例如: * `string strExample;` 声明一个字符串变量 * `char chrExample;` 声明一个字符变量 * `bool blnExample;` 声明一个布尔型变量 * `DateTime datExample;` 声明...

Global site tag (gtag.js) - Google Analytics