`

利用apache commons对List元素的多个属性进行排序

    博客分类:
  • JAVA
阅读更多
package com;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.commons.beanutils.BeanComparator;

import com.CfgModel;

public class ListSorter {

		    /**
		     * List 元素的多个属性进行排序。例如 ListSorter.sort(list, 

		"orderIndex", "treeLevel"),则先按
		     * orderIndex 属性排序,orderIndex 相同的元素按 treeLevel 属性排序。
		     *
		     * @param list       包含要排序元素的 List
		     * @param properties 要排序的属性。前面的值优先级高。
		     */
		    public static <V> void sort(List<V> list, final String... properties) {
		        Collections.sort(list, new Comparator<V>() {
		            public int compare(V o1, V o2) {
		                if (o1 == null && o2 == null) return 0;
		                if (o1 == null) return -1;
		                if (o2 == null) return 1;

		                for (String property : properties) {
		                    Comparator c = new BeanComparator(property);
		                    int result = c.compare(o1, o2);
		                    if (result != 0) {
		                        return result;
		                    }
		                }
		                return 0;
		            }
		        });
		    }
		    
		    public static void main(String[] args){
		    	List<CfgModel> list = new ArrayList<CfgModel>();
		    	CfgModel cfgModel1 = new CfgModel(); 
		    	cfgModel1.setModelName("l1");
		    	cfgModel1.setOrderIndex(1);
		    	cfgModel1.setTreeLevel(1);
		    	list.add(cfgModel1);
		    	
		    	CfgModel cfgModel2 = new CfgModel(); 
		    	cfgModel2.setModelName("l12");
		    	cfgModel2.setOrderIndex(2);
		    	cfgModel2.setTreeLevel(1);
		    	list.add(cfgModel2);
		    	
		    	CfgModel cfgModel3 = new CfgModel(); 
		    	cfgModel3.setModelName("l2");
		    	cfgModel3.setOrderIndex(1);
		    	cfgModel3.setTreeLevel(2);
		    	list.add(cfgModel3);
		    	
		    	CfgModel cfgModel4 = new CfgModel(); 
		    	cfgModel4.setModelName("l21");
		    	cfgModel4.setOrderIndex(2);
		    	cfgModel4.setTreeLevel(2);
		    	list.add(cfgModel4);
		    	
		    	sort(list, "orderIndex","treeLevel");
		    	for (CfgModel c:list){
		    		System.out.println(c.getModelName()+","+c.getOrderIndex()+","+c.getTreeLevel());
		    	}
		    }
}

 

结果:

l1,1,1

l2,1,2

l12,2,1

l21,2,2

 

先按orderIndex排序然后按treeLevel排序

分享到:
评论

相关推荐

    java开源包10

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例174 捕获多个异常 222 第8章 枚举与泛型的应用 223 8.1 枚举使用的简介 224 实例175 查看枚举类型的定义 224 实例176 枚举类型的基本特性 225 实例177 增加枚举元素的信息 226 实例178 选择合适的枚举元素 227 ...

    java开源包1

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包11

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包2

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包3

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包6

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包5

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包4

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包8

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包7

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包9

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包101

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    Java资源包01

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    JAVA上百实例源码以及开源项目源代码

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

Global site tag (gtag.js) - Google Analytics