Java如何操作对象(bean)进行动态排序?
原文出自:https://blog.csdn.net/seesun2012
简介如题:Java如何操作对象(bean)进行动态排序?Java实体类(bean)动态排序?
原理:利用反射根据指定的属性值来排序;
技巧:利用Collections组件的ComparatorUtils类可以实现含有空值的排序,请读者参考相关的API;
(1)编写Student类,该类定义了3个域:id,name,score,并且提供了相应的get和set方法。代码如下:
package com.seesun2012.test;
import java.io.Serializable;
/**
* 学生类
*
* @author seesun2012@163.com
*
*/
public class Student implements Serializable{
private static final long serialVersionUID = -2551164688062992567L;
private int id; //编号
private String name; //姓名
private double score; //分数
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 getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "学生编号:" + id + ",学生姓名:" + name + ",分数:" + score;
}
}
(2)编写测试类,在该类的main()方法中创建了3个Student对象并进行初始化,然后使用score域进行排序。代码如下:
package com.seesun2012.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
/**
* Java实体类(bean)动态排序
*
* @author seesun2012@163.com
*
*/
public class BeanSortTest {
public static void main(String[] args){
Student s = new Student();
s.setId(1);
s.setName("张三");
s.setScore(80.00);
Student s1 = new Student();
s1.setId(2);
s1.setName("李四");
s1.setScore(100.00);
Student s2 = new Student();
s2.setId(3);
s2.setName("王五");
s2.setScore(59.99);
List<Student> list = new ArrayList<Student>();
list.add(s);
list.add(s1);
list.add(s2);
System.out.println("排序前:");
for (Student sd : list) {
System.out.println(sd);// 输出所有对象
}
////////////// 进行排序(特别注意,这里可以动态入参)//////////////
Collections.<Student> sort(list, new BeanComparator<Student>("score"));
System.out.println("按成绩排序后:");
for (Student sd : list) {
System.out.println(sd);// 输出所有对象
}
}
}
排序前:
学生编号:1,学生姓名:张三,分数:80.0
学生编号:2,学生姓名:李四,分数:100.0
学生编号:3,学生姓名:王五,分数:59.99
按【成绩】排序后:
学生编号:2,学生姓名:李四,分数:59.99
学生编号:1,学生姓名:王五,分数:80.0
学生编号:3,学生姓名:张三,分数:100.0
Java如何操作对象(bean)进行动态排序?的更多相关文章
- 086、Java数组之对象数组的动态初始化
01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
/*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...
- java设计模式--基础思想总结--父类引用操作对象
看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地 ...
- 有关java的引用传递,直接操作对象本身。直接删除BE的value中某值
HashSet<String> refRegions = BE.get(regionName); HashSet<String> values = new HashSet ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- java实现两个不同list对象合并后并排序
工作上遇到一个要求两个不同list对象合并后并排序1.问题描述从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序.2.思路从数据库中查询到的数据放到各自list中,先遍历两 ...
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- java中对对象进行判空的操作--简洁编码
java中对对象进行判空的操作 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.ut ...
- Java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
对象转换为Json 对象bean转换为Json List集合转换为Json 对象数组转换为Json Map集合转换为Json Set集合转为Json 字符串转换为Json 把Java对常用的一些数据转 ...
随机推荐
- 大咖分享 | 一文解锁首届云创大会干货——下篇(文末附演讲ppt文件免费下载)
本文承接上一篇:大咖分享 | 一文解锁首届云创大会干货--上篇(文末附演讲ppt文件免费下载),第一届云创大会留下干货太多,这里追加下篇,同样,文末提供大咖们的干货分享,点击附件可免费下载. ...
- JAVA特性一:封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 封装概念详解:封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口. 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完 ...
- C#写入文件
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\testDir\test2.txt", t ...
- java—在dbutils中处理事务与不确定条件的查询(46)
在dbutils中处理事务 事务是指用户的一次操作.这一次操作有可能是一个表,也有可能是多个表,也有可能是对一个表的多次操作. 只要是: 1:对数据数据库进行多次操作. 2:多个表,还是 ...
- LOJ#162. 快速幂 2(分块)
题面 传送门 题解 orzljz 我们分块,设\(s=\sqrt{p}+1\),那么\(x^a\)可以拆成\((x^s)^{a/s}\)和\(x^{a\bmod s}\),\(O(s)\)预处理,\( ...
- day00 预习 ------基础数据类型预习 ,int ,str ,bool ,dict ,set ,切片,等相关
知识点明确 1 int 2 str 3 元祖 4.列表 5. 字典 6 集合 7 布尔 1 int 数据类型 int 数据类型指的是. 数字型的内容 ,主要用于计算, 2 str 字符类型 str ...
- JMeter知识点整理
- #Go# 常用类型转换
#string 2 int int, err := strconv.Atoi(string) #string 2 int64 int64, err := strconv.ParseInt(string ...
- Fleury算法
关于为什么不选桥 因为选桥之后会变成两个联通分支,这时由于可能产生的新联通分支不是孤立顶点,他俩都不联通了,那么也就绝对不可能“一笔画”走下来了 关于为什么可以选除桥之外的任意一条边走 本质原因是因为 ...
- Java代码度量分析工具:Designite简介
前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...