一个排序类,一个排序util?

no、no、no……

使用反射机制,写了一个通用的对象排序util,欢迎指正。

实体类:

package entity;

public class BaseTypeEntity {
public BaseTypeEntity(int i, String sg, double d, float f, short st, long l, char c) {
super();
this.i = i;
this.sg = sg;
this.d = d;
this.f = f;
this.st = st;
this.l = l;
this.c = c;
}
@Override
public String toString() {
return "BaseTypeEntity [i=" + i + ", sg=" + sg + ", d=" + d + ", f=" + f + ", st=" + st + ", l=" + l + ", c="
+ c + "]";
}
private int i;
private String sg;
private double d;
private float f;
private short st;
private long l;
private char c; public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public String getSg() {
return sg;
}
public void setSg(String sg) {
this.sg = sg;
}
public double getD() {
return d;
}
public void setD(double d) {
this.d = d;
}
public float getF() {
return f;
}
public void setF(float f) {
this.f = f;
}
public short getSt() {
return st;
}
public void setSt(short st) {
this.st = st;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
} }

排序类(重点--圈一下,考试要考):

package util;

import java.lang.reflect.Field;
import java.util.Comparator; @SuppressWarnings("rawtypes")
public class ComparatorUtil implements Comparator{
//要排序的属性名
private String name;
//是否升序
private boolean falg = true;
/**
* @param name 要排序的属性名,如果是基本类型的排序,请入null值
* @param falg false/true : 升序/降序
*/
public ComparatorUtil(String name, boolean falg) {
super();
this.name = name;
this.falg = falg;
} @Override
public int compare(Object o1, Object o2) {
int result = 0;
//入参为空|参数类型不相等,都不进行处理。
if(o1 == null || o2 == null || !o1.getClass().getName().equals(o2.getClass().getName())){
return result;
}
//7大基本类型的处理(boolean除外.且把Collections.reverse()/Collections.sort()的事也做了)
if(isBaseType(o1)){
//比较
return baseTypeOpt(o1,o2);
}
try {
Field f1 = o1.getClass().getDeclaredField(name);
Field f2 = o2.getClass().getDeclaredField(name);
//设置private可读
f1.setAccessible(true);
f2.setAccessible(true);
result = baseTypeOpt(f1.get(o1),f2.get(o2));
} catch (Exception e) { //异常懒得处理了,如果没有对应的属性,那就不排序了.(手动滑稽)
e.printStackTrace();
}
return result;
} private int baseTypeOpt(Object o1, Object o2) {
int result = 0;
if(o1 instanceof String){
result = o1.toString().compareTo(o2.toString());
}else if(o1 instanceof Integer){
result = ((Integer)o1) - ((Integer)o2);
}else if(o1 instanceof Double){
if(((Double)o1 - (Double)o2) > 0){
result = 1;
}else if(((Double)o1 - (Double)o2) < 0){
result = -1;
}
}else if(o1 instanceof Float){
if(((Float)o1 - (Float)o2) > 0){
result = 1;
}else if(((Float)o1 - (Float)o2) < 0){
result = -1;
}
}else if(o1 instanceof Character){
result = ((Character)o1).compareTo(((Character)o2));
}else if(o1 instanceof Short){
result = ((Short)o1) - ((Short)o2);
}else if(o1 instanceof Long){
if(((Long)o1 - (Long)o2) > 0){
result = 1;
}else if(((Long)o1 - (Long)o2) < 0){
result = -1;
}
}
//降序
if(isFalg()){
result = -result;
}
return result;
} private boolean isBaseType(Object o) {
if((o instanceof String) || (o instanceof Integer)
|| (o instanceof Double) || (o instanceof Float)
|| (o instanceof Character) || (o instanceof Short)
|| (o instanceof Long)){
return true;
}
return false;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public boolean isFalg() {
return falg;
} public void setFalg(boolean falg) {
this.falg = falg;
} }

测试类:

package util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import entity.BaseTypeEntity;
import entity.User; public class MainTest { public static void main(String[] args) {
//基本类型排序
baseTypeSort();
//对象排序
objectSort();
} private static void baseTypeSort(){
List<String> ss = new ArrayList<String>();
ss.add("aa");
ss.add("bc");
ss.add("ac");
ss.add("ba");
ss.add("dd");
ss.add("da");
System.out.println("before sort:");
System.out.println(ss);
System.out.println("sort end");
//倒序
Collections.reverse(ss);
System.out.println(ss);
} private static void objectSort(){
List<BaseTypeEntity> btes = new ArrayList<BaseTypeEntity>();
BaseTypeEntity bte = new BaseTypeEntity(1, "abc", 12d, 15f, (short) 3, 600l, 'd');
btes.add(bte);
bte = new BaseTypeEntity(2, "aba", 122d, 152f, (short) 2, 602l, 'a');
btes.add(bte);
bte = new BaseTypeEntity(3, "aac", 132d, 132f, (short) 1, 3l, 'a');
btes.add(bte);
System.out.println("before sort:");
for(BaseTypeEntity b : btes){
System.out.println(b);
}
//开始排序
Collections.sort(btes,new ComparatorUtil("d",true));
System.out.println("sort end");
for(BaseTypeEntity b : btes){
System.out.println(b);
}
} }

(少于150个字,不让发布)

来点人生感悟,凑字数。

7月初刚刚换好工作,个人感觉还是进大公司好,各方面很规范。之前的小公司,就没有规范一说了。业务不行了,就解散了整个研发部,然后没有按照国家的法律来走,我还差一个月就工作满一年了,才补贴半个月……还强迫我们签离职协议,不签就不补。

语气强硬的说:就补这么多,不服可以去劳动局闹,我们不怕。-------确实牛哈

欢迎评论、指正。

java 通用对象排序的更多相关文章

  1. [个人原创]关于java中对象排序的一些探讨(三)

    这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...

  2. java对对象排序

    一.前言 有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable<T>接口,然后调用Collections.so ...

  3. [个人原创]关于java中对象排序的一些探讨(一)

    有的时候我们需要将自己定义的对象,有序输出.因为一般我们程序的中间结果需要存储在容器里,那么怎样对容器中的对象按照一定次序输出就是程序员经常需要考虑的问题.本片文章探讨了怎样有序化输出容器中的对象的问 ...

  4. JAVA list对象排序加去重问题

    对象类实现继承Comparable接口重写compareTo方法实现排序功能,重写equals方法实现去重功能(根据ID去重)public class TestAbilityAnalyze imple ...

  5. [个人原创]关于java中对象排序的一些探讨(二)

    2.  使用Collections.sort()方法 Collections类中提供了诸多静态方法,诸如addAll(),max()等等.当自己相对Collection接口下的类处理的时候,可以看看这 ...

  6. List对象排序的通用方法

    转自 @author chenchuang import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Me ...

  7. Java对象排序

    java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口 //Product.java import java.util.Date; //p ...

  8. Java - 简单的对象排序 - Comparator

    注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...

  9. Java集合中对象排序

    集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...

随机推荐

  1. robot framework踩坑记录

    一.报错:FAIL : 'Return' is a reserved keyword. 给Retrun加上中括号即可 二.报错:True != true 三.报错 /Library/Python/2. ...

  2. robot framework学习笔记之三—Scalar变量

    一.变量赋值 1)Set赋值 通常使用Set Variable关键字对变量进行赋值,其他Set相关的带Variable的关键字也可以进行赋值 赋值的时候,变量后面写不写『=』都可以,如下: 如果${v ...

  3. 《快学Scala》第三章 数组相关操作

  4. Groovy学习记录-------Groovy安装/配置

    1.Groovy SDK下载 Groovy SDK官网下载地址: http://www.groovy-lang.org/download.html  每个版本有五个选项可供下载,依次为: binary ...

  5. 使用 Hexo + github 搭建个人博客

    来自:http://www.cnblogs.com/fengzheng/p/8031518.html Hexo 是什么 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或 ...

  6. Metal Programming Guide

    读苹果文档时的笔记,给自己看. primary goal of Metal is to minimize the CPU overhead incurred by executing GPU work ...

  7. 计算机网络课设之TCP通讯录

    这篇文章我主要是想对这学期末计算机网络课程设计所做的一个小项目也就是基于tcp协议的通讯录做一个总结梳理.项目的具体的代码实现是基于C语言,当然在此之前网上也有一些基于c++编写的tcp通讯录,原理都 ...

  8. SpringCloud2.0

    一.网站架构演变过程 从传统架构(单体应用)  到   分布式架构(以项目进行拆分)  到  SOA架构(面向服务架构)  到   微服务架构 1) 传统架构: 其实就是SSH或者SSM,属于单点应用 ...

  9. prim /kruskal 最小生成树

    #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #inc ...

  10. OpenERP 中国财务模块 调整

    最开始的模样是这个样子的 后三行是没用的,于是在RML文件中注释掉相关的代码,改进后的界面如下: 这个样子看起来是好多了,但是 数量跟是十亿千百的那块看起来还是很别扭,调整行高后的结果: 最诡异的事情 ...