Java中如果对对象排序可以考虑实现Comparable接口,但是需要排序的属性一旦指定就不能再修改。BeanUtils组件提供了对JavaBean动态排序的支持,即可以在运行时指定排序的属性。实例运行效果如图

BeanComparator通过指定的属性来比较两个bean。它也可以用来比较级联属性、索引属性、映射属性和组合属性等。BeanComparator默认把指定的bean属性传递给ComparableComparator。如果比较的属性值可能有空值,那么应该传递一个合适的Comparator或ComparatorChain给构造方法。

技巧:利用Collections组件的ComparatorUtils类可以实现含有空值的排序,请读者参考相关的API。

(1)编写Employee类,该类定义了3个域:id表示员工的序号,name表示员工的姓名,salary表示员工的薪水,并且提供了相应的get和set方法。代码如下:

 private int id;private String name;private double salary;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String toString() {return "员工编号:" + id + ",员工姓名:" + name + ",员工工资:" + salary;}
}

(2)编写Test类,在该类的main()方法中创建了3个Employee对象并进行初始化,然后使用salary域进行排序。代码如下:

package com.mingrisoft.beanutils;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import org.apache.commons.beanutils.BeanComparator;public class Test {@SuppressWarnings("unchecked")public static void main(String[] args) {Employee employee1 = new Employee();// 创建employee1对象并初始化employee1.setId(1);employee1.setName("IBM");employee1.setSalary(10000);Employee employee2 = new Employee();// 创建employee2对象并初始化employee2.setId(2);employee2.setName("Oracle");employee2.setSalary(1000);Employee employee3 = new Employee();// 创建employee3对象并初始化employee3.setId(3);employee3.setName("Sun");employee3.setSalary(100);List<Employee> list = new ArrayList<Employee>();// 创建list对象并保存全部员工对象
        list.add(employee1);list.add(employee2);list.add(employee3);System.out.println("排序前:");for (Employee employee : list) {System.out.println(employee);// 输出所有对象
        }Collections.<Employee> sort(list, new BeanComparator("salary"));// 进行排序System.out.println("按工资排序后:");for (Employee employee : list) {System.out.println(employee);// 输出所有对象
        }}
}

心法领悟:动态排序的原理。

BeanComparator实现了Comparator接口,利用反射根据指定的属性值来排序。使用该类的方法比自己实现该功能要好很多,希望读者认真掌握。

转载于:https://www.cnblogs.com/mrxy/p/6603365.html

动态排序JavaBean相关推荐

  1. 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来 并具有动态排序 动态生成查询 自动分页功能

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 使用该类 ...

  2. XML动态排序(1)

    <?xml version="1.0" encoding="gb2312" ?> <?xml-stylesheet type="te ...

  3. ActiveReports 报表应用教程 (9)---交互式报表之动态排序

    在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据 ...

  4. 1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)

    摘 要 在制作动态排序动画之前,我们看一下数据的整理情况: a.对第1)种大部分数据的情况,先爬取下来,输出到excel(1): b.对第2)种小部分数据的情况,也先爬取下来,输出到另一个excel( ...

  5. 【技术】SQL动态排序?

    SQL 实现动态排序 排序 实现 排序 排序是项目必须要考虑到的细节,可以提高用户的体验度.比如:订单一般按照时间的降序展示:学生信息一般按照姓名的升序展示等:这些都是比较基础的排序. 顺带复习一下: ...

  6. Mybatis遍历Map集合(Java/Mybatis动态排序)

    以动态order by为例,即通过if和foreach标签动态拼接order by的排序字段.动态排序的案例详见最下面的测试. Mapper.xml <select id="dynam ...

  7. python高逼格动态图_40行Python制作超炫酷动态排序图,有了它高逼格PPT再也不愁!...

    前言 最近,这种动态排序条形图视频超级火,如下图: 具体来说,这种图可以叫:Bar Chart Race,有什么国家GDP的.某某沉浮史等等,为了符合公众号的身份属性,我们为大家制作了这个较为简单的可 ...

  8. mysql 存储过程 动态排序

    //参数 set @sidx=sx;/排序名称/ set @sord=sd;/排序方式/ 动态排序 if @sord="desc" then CASE @sidx WHEN 'zj ...

  9. IQueryable查询器扩展Expression动态排序

    IQueryable查询器扩展Expression动态排序 查询器扩展方法 分页类 查询器扩展方法 /// <summary>/// 获取分页排序列表/// </summary> ...

最新文章

  1. Java isfile()与exists()的区别
  2. mega_[MEGA DEAL]完整的Java编程训练营(94%折扣)
  3. Android--添加子视图(addView和setView)
  4. 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块
  5. 练习C语言二级编程题的一些问题
  6. 转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
  7. Uep的ajaxform和ajaxgrid组件获取数据源
  8. 跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架
  9. 无法对数据库'XXX' 执行删除,因为它正用于复制的解决方
  10. 温州服务器付费方式_新购买的服务器是选择包年包月还是按流量计费呢?
  11. 响应式布局及bootstrap(实例)
  12. 学生选课管理系统(Java)
  13. C语言加减乘除运算符
  14. windows命令行将应用程序加入环境变量
  15. 史上最详细sql注入wp
  16. 问题 D: 猫和兔子
  17. 同时支持手机号、用户名、邮箱登录
  18. app:processDebugManifest 错误
  19. buctoj-2022寒假集训2
  20. 来钱快的3种副业,虽然不起眼,不过很赚钱‍‍‍

热门文章

  1. c语言程序中cost的作用,C语言考试题基础版(21页)-原创力文档
  2. 稍等片刻 正在提取文件_电脑文件误删除并且清空了回收站,怎么恢复文件?教你一招!...
  3. python初步入门_python如何入门
  4. linux:ubantu中pycharm专业版安装
  5. 中国燃油宝市场需求预测与投资前景趋势分析报告2022-2028年版
  6. Linux下Tomcat与Apache Web服务器的整合
  7. include(),include_once(),requice(),require_once()的区别
  8. js实现焦点进入文本框内关闭输入法:imeMode
  9. 忘记农民就是忘本-农业大健康·万祥军:不要说自己是教授
  10. 在LNMP或Nginx上配置NameCheap免费SSL证书