博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态排序JavaBean
阅读量:6567 次
发布时间:2019-06-24

本文共 2475 字,大约阅读时间需要 8 分钟。

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

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

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

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

 

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;    }        @Override    public String toString() {        return "员工编号:" + id + ",员工姓名:" + name + ",员工工资:" + salary;    }}

 

2)编写Test类,在该类的main()方法中创建了3Employee对象并进行初始化,然后使用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
list = new ArrayList
();// 创建list对象并保存全部员工对象 list.add(employee1); list.add(employee2); list.add(employee3); System.out.println("排序前:"); for (Employee employee : list) { System.out.println(employee);// 输出所有对象 } Collections.
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

你可能感兴趣的文章
Web自动化之Headless Chrome概览
查看>>
【133天】尚学堂高淇Java300集视频精华笔记(71-72)
查看>>
剖析 Laravel 计划任务--事件属性
查看>>
百度成立国内首个深度学习教育联盟,将制定行业标准
查看>>
Micronaut教程:如何使用基于JVM的框架构建微服务
查看>>
检查IP是否可用的方法
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
作为数据科学家,我都有哪些弱点
查看>>
(转)线程安全的CopyOnWriteArrayList介绍
查看>>
中交兴路完成7亿元A轮融资,携手蚂蚁金服共建小微物流科技服务生态
查看>>
对LinqtoExcel的扩展 【数据有限性,逻辑有效性】
查看>>
WPF TreeView HierarchicalDataTemplate
查看>>
32岁老程序员的现状和尴尬,无奈中透露些许悲凉,有选择却更痛苦
查看>>
WPF MeshGeometry3D
查看>>
puppet cron 模块
查看>>
mysql 协议的ResultsetRow包及解析
查看>>
Ymal格式转Properties格式
查看>>
一个生成全局唯一Sequence ID的高并发工厂类 (Java)
查看>>
调优之系统篇--cpu,内存
查看>>