`

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

    博客分类:
  • 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
分享到:
评论

相关推荐

    java版本List中对象多属性排序.rar

    当我们说要对`List`中的对象进行排序时,这意味着我们需要依据对象的属性(如成员变量)来调整它们在列表中的顺序。 Java提供了两种主要的排序方法: 1. **Collections.sort()**:这是最常用的方法,适用于`List`...

    Java对List对象进行排序_.docx

    由于我们可能需要访问非public的成员变量,因此在获取到Field对象后,需要调用`setAccessible(true)`来取消访问限制。 下面是一个通用的排序方法示例: ```java public static &lt;T&gt; void sortList(List&lt;T&gt; list, ...

    List数据字段排序不关注数据库,直接排序

    通过这种方式,我们可以在 Java 中轻松地对 List 集合中的对象按照指定的属性进行排序。这种做法不仅提高了代码的灵活性,而且避免了不必要的数据库操作,从而减少了系统的负担。对于需要频繁进行排序操作的应用来说...

    qt文件读取,数据排序

    这个项目很可能是将读取到的数据存储在一个结构体数组中,然后对结构体的某个成员变量进行排序。例如,如果有一个包含姓名和年龄的结构体`Person`,可以这样排序: ```cpp struct Person { QString name; int age...

    封装好的CListCtrl排序类

    在这里,开发者可能定义了一个新的类,继承自CListCtrl,并添加了排序的方法和成员变量。 2. **SortListCtrlDemoDlg.cpp**: 这可能是演示如何使用排序类的对话框类的实现。通过这个示例,用户可以了解如何在实际...

    android 表格 排序 源码

    Comparator会根据指定列的值比较两个对象,实现升序或降序排序。 6. **更新Adapter并通知数据改变**: 排序完成后,更新Adapter的数据集,并调用`notifyDataSetChanged()`通知UI进行刷新。这样,表格就会根据新的...

    关于c++类与对象的资料

    常量成员变量不能在对象内部修改,静态成员为类的所有对象共享,而友元函数可以访问类的私有和保护成员。这些特性使得类能更好地适应不同的需求。 2.4 类的包含 类可以包含其他类作为其成员,这种关系被称为继承。...

    C# 变量 枚举和数组

    在C#中,声明变量时需要指定其类型和名称。例如: ```csharp int age = 25; // 定义一个整型变量age并赋值为25 string name = "张三"; // 定义一个字符串变量name并赋值为"张三" ``` 变量的值可以在程序执行过程中...

    实验室成员管理系统

    系统的核心功能包括输入新成员数据、查询现有成员信息以及输出成员信息到指定格式,方便团队进行人员管理和交流。 在Java编程语言中,这样的系统通常会利用Java Swing或JavaFX库来构建图形用户界面(GUI),提供...

    安卓Excelwordppt文档读写相关-仿excel表格排序效果实现点击头部按列排序效果.rar

    这可以作为成员变量存储在`Adapter`或`Activity`/`Fragment`中。 7. **文档读写库**:虽然这个资源主要关注UI层面的排序,但如果你需要在Android应用中直接读写Excel文件,可以考虑使用第三方库,如Apache POI...

    CListCtrl排序

    `method`变量的作用在于控制排序的方向,即升序或降序。当用户再次点击同一列时,`method`的值将反转,从而实现排序方向的切换。 通过以上步骤,我们可以实现在`CListCtrl`中的自定义排序功能,不仅提高了用户界面...

    C++中如何定义函数对象?

    `sort()` 函数接受这些函数对象作为第三个参数,从而可以按照用户指定的顺序对元素进行排序。 ### 总结 通过以上示例可以看出,函数对象在C++中具有很大的灵活性和实用性。它们不仅可以作为简单的函数替代品,还...

    VS C++2005类与对象的课件

    // 不指定结构名,直接定义对象s1和s2 ``` 在提供的代码示例中,有一个简单的排序算法,用于根据成绩对10个学生的学号和分数进行排序。这里展示了如何使用结构体来存储多个相关数据,并通过指针或引用进行操作。...

    About \"sort of the objects\"

    1. **对象的概念**:在计算机科学中,对象是类的实例,包含属性(也称为字段或成员变量)和方法(函数)。对象可以用来封装数据和行为,是面向对象编程的基础。 2. **排序的必要性**:在处理大量数据时,排序能够...

    line_map_线性表顺序排序_

    顺序排序则是对线性表中的元素进行排列,使得表中的元素按照某种特定的顺序(如升序或降序)排列。在C++中实现线性表的顺序存储,主要涉及到动态数组、内存管理和基本的排序算法。 1. **动态数组(DynamicArray)**...

    专升本面向对象程序设计.doc

    1. **成员变量与访问修饰符**:题目中的选项涉及到成员变量的类型,如`const volatile int`。在C++中,`const`用于声明不可变的变量,`volatile`则用于表示可能由外部因素(如硬件中断)改变的变量。成员变量可以...

    C++实现成绩排名

    本篇文章将通过一个具体的案例来介绍如何使用C++语言实现学生学生成绩的录入、计算平均分以及按照指定条件进行成绩排名的功能。此程序主要采用了选择排序算法来实现数据的排序。 #### 二、关键技术点 ##### 2.1 类...

    Java面向对象的学习(关键字)

    当访问属性或方法时,如果未明确指定`this`或`super`,则会按照以下顺序查找:局部变量 -&gt; 成员变量 -&gt; 父类变量。如果在这些范围内都找不到,编译器会抛出错误。`this`修饰的变量在当前类找不到时,会继续在父类中...

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

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

Global site tag (gtag.js) - Google Analytics