`

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

    博客分类:
  • 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 通过对象名...

    谭浩强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 ...

    kellerMapper.jar

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

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

    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 范例:...

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

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

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

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

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

    C++编程思想,用简单的例子和简练的叙述讲解C++编程,别具特色。

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

    疯狂JAVA讲义

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

    Java开发技术大全 电子版

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

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

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

    java 面试题 总结

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

    easy-list:使C ++类存储具有简化功能的n元组列表,以进行搜索,排序,迭代,转换,选择和映射

    搜寻中可以在list中搜索与指定谓词或指定成员(变量或方法)的匹配项。 搜索将使迭代器返回第一个找到的匹配项,如果没有找到匹配项,则返回end() 。 以下两个表达式是等效的: myList.search(match, &ObjectType::...

Global site tag (gtag.js) - Google Analytics