java 动态属性排序_动态排序JavaBean

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

14c67c74bcdb5f09e7883a1bc7d6f71a.png 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;

}

@Override

public 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 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接口,利用反射根据指定的属性值来排序。使用该类的方法比自己实现该功能要好很多,希望读者认真掌握。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值