由bean组成的list根据某一字段排序

  1 package com.chinfotech.common.util;
  2 import java.util.ArrayList;
  3 import java.util.Collections;
  4 import java.util.Comparator;
  5 import java.util.LinkedHashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8
  9 import org.apache.commons.beanutils.BeanComparator;
 10 import org.apache.commons.collections.ComparatorUtils;
 11 import org.apache.commons.collections.comparators.ComparableComparator;
 12 import org.apache.commons.collections.comparators.ComparatorChain;
 13 import org.apache.commons.collections.comparators.NullComparator;
 14
 15 import com.chinfotech.scenicManage.bean.SaleTim;
 16 /**
 17  *
 18  * @author gaomengqin
 19  * 将bean封装成list后按照某一字段排序
 20  *
 21  */
 22
 23 public class ListSort {
 24
 25     /**
 26      * bean的某一个属性
 27      * @param list:列表名称
 28      * @param filedName:属性名称
 29      * @param ascFlag:true;升序;false:降序
 30      */
 31     @SuppressWarnings("unchecked")
 32     public static void sort(List list, String filedName, boolean ascFlag) {
 33
 34         if (list.size() == 0 || filedName.equals("")) {
 35             return;
 36         }
 37         Comparator<?> cmp = ComparableComparator.getInstance();
 38         // 判断升序还是降序
 39         if (ascFlag) {
 40             cmp = ComparatorUtils.nullLowComparator(cmp);
 41         } else {
 42             cmp = ComparatorUtils.reversedComparator(cmp);
 43
 44         }
 45         Collections.sort(list, new BeanComparator(filedName, cmp));
 46     }
 47
 48     /**
 49      * bean根据某几个属性排序
 50      * @param beans
 51      * @param sortParam
 52      */
 53     @SuppressWarnings({ "rawtypes", "unchecked" })
 54     public static void sortExecute(List<?> beans, Map<String, String> sortParam) {
 55
 56         // 判断beans和排序规则是否有内容
 57         if (beans.size() == 0 || sortParam.keySet().size() == 0) {
 58             return;
 59         }
 60
 61         // 判断beans和排序规则是否有内容
 62         if (beans.isEmpty() || sortParam.isEmpty()) {
 63             return;
 64         }
 65         ComparatorChain comparator = new ComparatorChain();
 66         boolean sortMethod = false;
 67         for (String itemName : sortParam.keySet()) {
 68             sortMethod = false;
 69             if ("desc".equals(sortParam.get(itemName))) {
 70                 sortMethod = true;
 71             }
 72             comparator.addComparator(new BeanComparator(itemName, new NullComparator()), sortMethod);
 73         }
 74         Collections.sort(beans, comparator);
 75     }
 76
 77     public static void main(String[] args)
 78     {
 79         // TODO Auto-generated method stub
 80
 81         //1、单纯的列表为例
 82         ArrayList lst = new ArrayList();
 83         lst.add("00000000001");
 84         lst.add("00000000002");
 85         lst.add("00000000003");
 86         lst.add("00000000004");
 87         lst.add("00000000005");
 88         //单纯调用升序,无需改写方法
 89         Collections.sort(lst);
 90         System.out.println(lst.toString());
 91         //单纯调用降序,无需改写方法
 92         Collections.reverse(lst);
 93         System.out.println(lst.toString());
 94         //2、List<?> beans 为例
 95         List<SaleTim> list = new ArrayList<SaleTim>();
 96         SaleTim sb;
 97         sb = new SaleTim();
 98         sb.setCheck("1006");
 99         sb.setSale("3456");
100         sb.setTime("18:00");
101         list.add(sb);
102
103         sb = new SaleTim();
104         sb.setCheck("2378");
105         sb.setSale("1265");
106         sb.setTime("17:00");
107         list.add(sb);
108
109         sb = new SaleTim();
110         sb.setCheck("1026");
111         sb.setSale("2390");
112         sb.setTime("19:30");
113         list.add(sb);
114
115         sb = new SaleTim();
116         sb.setCheck("2900");
117         sb.setSale("1089");
118         sb.setTime("15:30");
119         list.add(sb);
120
121
122         sb = new SaleTim();
123         sb.setCheck("2000");
124         sb.setSale("3678");
125         sb.setTime("16:30");
126         list.add(sb);
127
128         sb = new SaleTim();
129         sb.setCheck("4500");
130         sb.setSale("4000");
131         sb.setTime("17:30");
132         list.add(sb);
133         System.out.println("***********原序*************");
134         //原序
135         for(SaleTim item : list){
136             System.out.print(item.getCheck()+"    ");
137             System.out.print(item.getSale()+"    ");
138             System.out.println(item.getTime());
139         }
140
141         //降順
142         System.out.println("***********check:降序*************");
143         ListSort.sort(list, "check", false);
144         for(SaleTim item : list){
145             System.out.print(item.getCheck()+"    ");
146             System.out.print(item.getSale()+"    ");
147             System.out.println(item.getTime());
148         }
149         //昇順
150         System.out.println("***********check:升序*************");
151         ListSort.sort(list, "check", true);
152         for(SaleTim item : list){
153               System.out.print(item.getCheck()+"    ");
154               System.out.print(item.getSale()+"    ");
155               System.out.println(item.getTime());
156         }
157         //昇順
158         System.out.println("***********time:升序*************");
159         ListSort.sort(list, "time", true);
160         for(SaleTim item : list){
161               System.out.print(item.getCheck()+"    ");
162               System.out.print(item.getSale()+"    ");
163               System.out.println(item.getTime());
164         }
165         //降順
166         System.out.println("***********time:降序*************");
167         ListSort.sort(list, "time", false);
168         for(SaleTim item : list){
169             System.out.print(item.getCheck()+"    ");
170             System.out.print(item.getSale()+"    ");
171             System.out.println(item.getTime());
172         }
173         System.out.println("***********check:升序 time:降序*************");
174         //3、LIST<?>beans 多个属性叠加排序
175         Map<String, String> sortParam = new LinkedHashMap<String, String>();
176         //check:昇順 time:降順
177         sortParam.put("check", "asc");
178         sortParam.put("time", "desc");
179         ListSort.sortExecute(list, sortParam);
180
181         for(SaleTim item : list){
182               System.out.print(item.getCheck()+"    ");
183               System.out.print(item.getSale()+"    ");
184               System.out.println(item.getTime());
185         }
186         sortParam.clear();
187         //check:昇順 time:昇順
188         sortParam.put("check", "desc");
189         sortParam.put("time", "asc");
190         ListSort.sortExecute(list, sortParam);
191         System.out.println("***********check:降順 time:昇順*************");
192         for(SaleTim item : list){
193             System.out.print(item.getCheck()+"    ");
194             System.out.print(item.getSale()+"    ");
195             System.out.println(item.getTime());
196       }
197     }
198 }
时间: 2025-01-20 04:01:47

由bean组成的list根据某一字段排序的相关文章

Spring--通过注解来配置bean【转】

Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性 在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定的组件包括: [email protected]:基本注解,标识了一个受Spring管理的组件 [email protected]:标识持久层组件 [email protected]:标识服务层(业务层)组件 [email protected]:

Spring--通过注解来配置bean

Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性 在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定的组件包括: [email protected]:基本注解,标识了一个受Spring管理的组件 [email protected]:标识持久层组件 [email protected]:标识服务层(业务层)组件 [email protected]:

J2EE的十三个技术——EJB之实体Bean

概述: 实体Bean与会话Bean不同,实体Bean是持久的,即使应用程序结束,它仍然存在.它允许共享访问,具有主键. 组成: 1)本地(Local)接口 本地访问EJB,只有在EJB与客户在同一个应用的情况下才可以使用.使用时,它可以与远程接口同时使用. 它可以优化访问EJB,绕过了RMI. 2)远程(Remote)接口 与本地接口最大的不同在于远程接口可以从任何地方访问. 命名: 如果只使用local或Remote接口之一,可使用正常名称.例如HelloWorld和HelloWorldHom

java使用反射比较两个bean对象属性值是否相等

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; public class DomainEquals { /** * 日志操作类 */ private static Logger logger = Logger.getLogger(DomainEquals.c

spring 注解方式配置Bean

概要: 再classpath中扫描组件 组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定组件包括: @Component:基本注解,标示了一个受Spring管理的组件(可以混用,spring还无法识别具体是哪一层) @Respository:建议标识持久层组件(可以混用,spring还无法识别具体是哪一层) @Service:建议标识服务层(业务层)组件(可以混用,spring还无法识别具体是哪一层) @Con

spring之bean的Scope

上篇文章较为详细了对各种情况下bean依赖的配置做了说明,但一直没有对Scope这个属性进行说明.本篇将一起学习.本文演示代码下载地址 当我们在xml配置文件中配置一个bean的定义的时候,可以认为是配置了一个模板,可以根据这个模板来生成很多个对象来满足整个应用程序的依赖关系,同时我们也可以配置对象的Scope. Scope可以理解为SpringIOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些scop

【JAVAWEB学习笔记】11_XML&amp;反射

解析XML总结(SAX.Pull.Dom三种方式) 反射的简单介绍: 反射 1.什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行其内容. 应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象.这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例.这就需要使用反射技术完成 2.获取class对象的三种方式 获取Class对象的方式一: 通过对象具备的getClass方法(源于Object类的方法).有点不方便,需要用到该类,并创建该类的对象,

java注解例子

java注解在web框架中使用比较广泛,这使得对象之间的关系配置起来更加容易 目前web框架中最常用的两种配置对象依赖关系的方式就是注解和xml配置文件的方法,api配置相对来说用的少一些, 下面实现一个Table注解来实现数据库表和实体bean之间的对应关系,实现一个Column注解来实现数据库表中每个字段和实体bean每个属性之间的 对应关系.java中的orm基本上就是根据这种思想来实现的. Table注解代码: package com.panther.dong.annotation.an

JavaEE中的依赖性——依赖性注入

当一个资源注解防止在一个字段或setter方法之上时,将会发生两件事.首先,就像放置在bean类之上一样声明资源引用(类似于上文中的代码示例),而且当创建组件时将把资源名称绑定到环境命名上下文.第二,该服务器将为您自动进行依赖性查找,并把结果设置到实例化的类中. 自动超找一个资源并将它设置到类中的过程称之为依赖性注入(dependency injection)因为据说服务器将把解析的依赖性注入类中.这种技术,其中一项通常称作控制反转(inversion of control),消除了手动从JND