`

利用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排序

分享到:
评论

相关推荐

    Apache commons-collections4-4.1 Src压缩包

    9. **数据结构**:库中还包含了一些特殊的数据结构,如`BidiMap`(双向映射)、`Bag`(计数集合)和`MultiSet`(允许多个元素的集合)。 10. **序列化和反序列化**:对于需要持久化集合的场景,`SerializationUtils...

    org.apache.commons.collections-3.2.1.jar.zip

    Apache Commons Collections是Apache软件基金会的一个开源项目,提供了一套强大的、灵活的且高度可定制的Java集合框架。这个框架扩展了Java标准库中的集合类,为开发人员提供了更多的功能和便利。在本次讨论中,我们...

    Java中对list元素进行排序的方法详解

    当需要根据List元素的多个属性进行排序时,Apache Commons BeanUtils库提供了一个`BeanComparator`类。虽然`BeanComparator`一次只能对一个属性进行排序,但可以通过链式调用创建多个`BeanComparator`来实现多属性...

    commons-beanutils和commons-collections-3.1的jar包

    Commons BeanUtils和Apache Commons Collections是Java开发中两个非常重要的库,它们为开发者提供了大量实用工具类,极大地简化了日常编程工作。这两个库都是Apache软件基金会的一部分,属于开源项目,广泛应用于...

    commons-collections4-4.2-bin

    例如,你可以使用`ListUtils`类来合并多个列表,使用`MapUtils`类创建默认值的映射,或者使用`Predicate`接口来过滤集合元素。 对于"commons-collections4-4.2"这个版本,它可能包含了一些错误修复、性能优化和新的...

    commons-collections-3.2.2-bin.tar包

    `commons-collections-3.2.2-bin.tar`是一个压缩包,它包含了Apache Commons Collections库的3.2.2版本。这个库是Java编程语言中一个非常重要的工具集,专门用于处理集合框架,如列表、映射、集合等。Apache Commons...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    ### Apache Commons Jar包常用类详解 #### 概述 Apache Commons项目是一系列为Java开发者提供的免费、可重用的开源库。这些库旨在提供解决常见编程任务的实用工具类,帮助开发者减少编码工作量,提高代码质量。...

    commons-collections4-4.4-bin.zip

    除了标准的Java集合实现,如ArrayList和HashMap,Commons Collections还提供了其他有用的实现,如`BoundedList`(限制大小的列表)、`Bag`(支持多重计数的集合)和`MultiMap`(一个键可以对应多个值的映射)。...

    commons-collections-3.2.1.jar

    8. **Bag接口**:提供了计数集合,其中元素可以有多个副本,支持按元素计数的操作。 9. **多值映射**:允许一个键对应多个值,如`MultiValueMap`。 10. **集合工具**:包含许多实用的静态方法,如集合的合并、分割...

    commons-pool-1.3.jar+commons-collections-3.2.1.jar

    例如,Struts使用`commons-collections`进行请求参数的处理和验证,Spring利用`commons-pool`实现数据库连接池,而Hibernate可能依赖两者来优化数据访问和资源管理。了解并熟练使用这些库,能帮助开发者提高程序效率...

    commons-collections-3.2.jar

    Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一系列高效、实用且功能丰富的数据结构和...

    commons-collections4-4.0.rar

    首先,Apache Commons Collections库提供了多种类型的集合实现,包括List、Set、Map等,这些实现通常具有更好的性能或特定的行为特性。例如,`BoundedList`可以限制列表的最大大小,避免过度填充;`Unmodifiable`...

    commons-collections4-4.1-bin.zip

    1. **容器类**:除了Java标准库中的List、Set、Map等,Collections4提供了更加灵活的容器,如MultiMap(允许多个键对应一个值),BidiMap(双向映射)以及Stack和Queue的实现。 2. **转换器**:转换器接口...

    commons-collections-3 jar

    `ComparatorChain`则允许串联多个比较器,进行复合排序。 6. **函数接口**:`Factory`接口用于创建对象,`Predicate`接口用于判断条件,这些接口配合其他组件可以实现函数式编程风格。 7. **集合工厂**:`...

    commons-collections所有版本(1.0-3.2.1).zip

    Apache Commons Collections是Apache软件基金会的一个项目,它提供了大量的类和接口来扩展Java的集合框架,包括List、Map、Set等接口的实现,以及各种实用工具类和算法。这个库的设计目标是提高代码的可读性和性能,...

    aduna-commons-collections-2.2.jar.zip

    7. **MapUtils和ListUtils**:这两个工具类提供了大量静态方法,方便开发者对Map和List进行操作,如创建默认Map、深度复制Map、列表排序等。 8. **泛型支持**:尽管2.2版本是在Java泛型引入之前发布的,但Aduna ...

    commons-collections.rar

    9. **映射和键值对**:`MultiMap`允许一个键对应多个值,`BidiMap`则提供了一种双向映射,可以双向查找键和值。 在Java项目中,正确使用Apache Commons Collections可以提高代码的效率和可读性。然而,需要注意的是...

    commons-collections-3.1

    - **多值映射**:MultiMap允许一个键对应多个值,可以使用putAll()方法一次性添加多个键值对。 - **集合转换**:通过ListUtil的list()方法,可以将数组或其他类型的集合转换为List。 3. **在实际开发中的应用**:...

Global site tag (gtag.js) - Google Analytics