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排序
相关推荐
9. **数据结构**:库中还包含了一些特殊的数据结构,如`BidiMap`(双向映射)、`Bag`(计数集合)和`MultiSet`(允许多个元素的集合)。 10. **序列化和反序列化**:对于需要持久化集合的场景,`SerializationUtils...
Apache Commons Collections是Apache软件基金会的一个开源项目,提供了一套强大的、灵活的且高度可定制的Java集合框架。这个框架扩展了Java标准库中的集合类,为开发人员提供了更多的功能和便利。在本次讨论中,我们...
当需要根据List元素的多个属性进行排序时,Apache Commons BeanUtils库提供了一个`BeanComparator`类。虽然`BeanComparator`一次只能对一个属性进行排序,但可以通过链式调用创建多个`BeanComparator`来实现多属性...
Commons BeanUtils和Apache Commons Collections是Java开发中两个非常重要的库,它们为开发者提供了大量实用工具类,极大地简化了日常编程工作。这两个库都是Apache软件基金会的一部分,属于开源项目,广泛应用于...
例如,你可以使用`ListUtils`类来合并多个列表,使用`MapUtils`类创建默认值的映射,或者使用`Predicate`接口来过滤集合元素。 对于"commons-collections4-4.2"这个版本,它可能包含了一些错误修复、性能优化和新的...
`commons-collections-3.2.2-bin.tar`是一个压缩包,它包含了Apache Commons Collections库的3.2.2版本。这个库是Java编程语言中一个非常重要的工具集,专门用于处理集合框架,如列表、映射、集合等。Apache Commons...
### Apache Commons Jar包常用类详解 #### 概述 Apache Commons项目是一系列为Java开发者提供的免费、可重用的开源库。这些库旨在提供解决常见编程任务的实用工具类,帮助开发者减少编码工作量,提高代码质量。...
除了标准的Java集合实现,如ArrayList和HashMap,Commons Collections还提供了其他有用的实现,如`BoundedList`(限制大小的列表)、`Bag`(支持多重计数的集合)和`MultiMap`(一个键可以对应多个值的映射)。...
8. **Bag接口**:提供了计数集合,其中元素可以有多个副本,支持按元素计数的操作。 9. **多值映射**:允许一个键对应多个值,如`MultiValueMap`。 10. **集合工具**:包含许多实用的静态方法,如集合的合并、分割...
例如,Struts使用`commons-collections`进行请求参数的处理和验证,Spring利用`commons-pool`实现数据库连接池,而Hibernate可能依赖两者来优化数据访问和资源管理。了解并熟练使用这些库,能帮助开发者提高程序效率...
Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一系列高效、实用且功能丰富的数据结构和...
首先,Apache Commons Collections库提供了多种类型的集合实现,包括List、Set、Map等,这些实现通常具有更好的性能或特定的行为特性。例如,`BoundedList`可以限制列表的最大大小,避免过度填充;`Unmodifiable`...
1. **容器类**:除了Java标准库中的List、Set、Map等,Collections4提供了更加灵活的容器,如MultiMap(允许多个键对应一个值),BidiMap(双向映射)以及Stack和Queue的实现。 2. **转换器**:转换器接口...
`ComparatorChain`则允许串联多个比较器,进行复合排序。 6. **函数接口**:`Factory`接口用于创建对象,`Predicate`接口用于判断条件,这些接口配合其他组件可以实现函数式编程风格。 7. **集合工厂**:`...
Apache Commons Collections是Apache软件基金会的一个项目,它提供了大量的类和接口来扩展Java的集合框架,包括List、Map、Set等接口的实现,以及各种实用工具类和算法。这个库的设计目标是提高代码的可读性和性能,...
7. **MapUtils和ListUtils**:这两个工具类提供了大量静态方法,方便开发者对Map和List进行操作,如创建默认Map、深度复制Map、列表排序等。 8. **泛型支持**:尽管2.2版本是在Java泛型引入之前发布的,但Aduna ...
9. **映射和键值对**:`MultiMap`允许一个键对应多个值,`BidiMap`则提供了一种双向映射,可以双向查找键和值。 在Java项目中,正确使用Apache Commons Collections可以提高代码的效率和可读性。然而,需要注意的是...
- **多值映射**:MultiMap允许一个键对应多个值,可以使用putAll()方法一次性添加多个键值对。 - **集合转换**:通过ListUtil的list()方法,可以将数组或其他类型的集合转换为List。 3. **在实际开发中的应用**:...