java对象字段排序_多字段 java对象排序

public class ReflexUtil {

static Logger logger = LoggerFactory.getLogger(ReflexUtil.class);

//getMethod

static public Object invokeMethod(String propertiesName, Object object) {

try {

if(object==null) return null;

if (!propertiesName.contains(".")) {

String methodName = "get"+getMethodName(propertiesName);

Method method = object.getClass().getMethod(methodName);

return method.invoke(object);

}

String methodName = "get"+getMethodName(propertiesName.substring(0,propertiesName.indexOf(".")));

Method method = object.getClass().getMethod(methodName);

return invokeMethod(propertiesName.substring(propertiesName.indexOf(".")+1), method.invoke(object));

} catch (Exception e) {

logger.error(e.toString(), e);

return null;

}

}

private static String getMethodName(String fildeName) {

byte[] items = fildeName.getBytes();

items[0] = (byte) ((char) items[0] - 'a' + 'A');

return new String(items);

}

public static void main(String args[]) {

Video video = new Video();

Album album = new Album();

album.setAlbumId(346l);

video.setAlbum(album);

video.setVideoId(126l);

System.out.println(ReflexUtil.invokeMethod("album.albumId", video));

}

}

public class CompareUtil {

//sort 1正序 -1 倒序  filed 多字段排序

public static Comparator createComparator(int sort, String... filed) {

return new ImComparator(sort, filed);

}

public static class ImComparatorimplements Comparator {

int sort =1;

String[] filed;

public ImComparator(int sort, String... filed) {

this.sort = sort == -1 ? -1 :1;

this.filed = filed;

}

@Override

public int compare(Object o1, Object o2) {

int result =0;

for (String file : filed) {

Object value1 = ReflexUtil.invokeMethod(file, o1);

Object value2 = ReflexUtil.invokeMethod(file, o2);

if (value1 ==null || value2 ==null) {

continue;

}

if (!(value1instanceof Integer) || !(value1instanceof Integer)) {

continue;

}

int v1 = Integer.valueOf(value1.toString());

int v2 = Integer.valueOf(value2.toString());

if (v1 == v2)continue;

if (sort ==1) {

return v1 - v2;

}else if (sort == -1) {

return v2 - v1;

}else {

continue;

}

}

return result;

}

}

public static void main(String args[]) {

LabelAlbum label1 =new LabelAlbum();

label1.setLabelId(1); label1.setSequnces(1);

LabelAlbum label2 =new LabelAlbum();

label2.setLabelId(1);label2.setSequnces(2);

LabelAlbum label3 =new LabelAlbum();

label3.setLabelId(3); label3.setSequnces(4);

LabelAlbum label4 =new LabelAlbum();

label4.setLabelId(3);label4.setSequnces(3);

LabelAlbum label5 =new LabelAlbum();

label5.setLabelId(4);label5.setSequnces(2);

List list =new ArrayList();

list.add(label1);

list.add(label2);

list.add(label3);

list.add(label4);

list.add(label5);

Collections.sort(list, CompareUtil.createComparator(1,"labelId","sequnces"));

for (int i =0; i < list.size(); i++) {

LabelAlbum labelAlbum=list.get(i);

System.out.println("labelId:"+labelAlbum.getLabelId()+"  sequence:"+labelAlbum.getSequnces());

}

}

}

Java 对象排序详解

很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...

Java对象排序

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

java对象排序(Comparable)详细实例

对象实现Comparable接口 public class Field implements Comparable{ private String name; private ...

&lbrack;Java&rsqb; 对象排序示例

package test.collections; import java.util.ArrayList; import java.util.Collection; import java.util. ...

Java对象排序两种方法

转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...

Java笔记12:Java对象排序

代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...

Java - 简单的对象排序 - Comparator

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

Java对象比较器对泛型List进行排序-Demo

针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以 ...

&lbrack;个人原创&rsqb;关于java中对象排序的一些探讨(三)

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

随机推荐

Ubuntu 16&period;04 Steam

Ubuntu 16.04安装Steam,直接去Steam官网下载客户端安装包即可.

Android Studio 一些使用经验

一.Mac或Win 7 配置环境,以gradle为例 (1).可以在这里找gradle下载,或者去官网啦 Mac添加环境变量: 1.启动Terminal终端 2.输入cd ~/ 进入当前用户的home ...

easyui combo自动高度(下拉框空白问题)

设置.combo-panel {max-height:200px;} 在用到easyui-combobox时,设置panelHeight:'auto'

《代码的第一行——Android》封面诞生

已经上市近一个月,现在的情况是相当不错的销售,也特别感谢众多朋友的支持. 其实一本好书,假设你想卖.除了给予外力所要求的内容.封面设计是至关重要的,这本书 ...

Java 故障安全异常处理

异常处理代码必须保证其故障安全机制,其中一条重要的规则如下: 在try-catch-finally块抛出的最后一个异常将会在调用堆栈中传递. 所有早期异常将会消失. 如果从一个catch或finall ...

&lbrack;BX&rsqb;指令

mov ax,[bx] 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中.即(ax)=((ds)*16+(bx)). mov [bx],ax 功能:b ...

Java线程分析

一.Java线程的生命周期中,存在几种状态.在Thread类里有一个枚举类型State,定义了线程的几种状态 public enum State { NEW, RUNNABLE, BLOCKED, W ...

kafka消费者客户端启动之后消费不到消息的原因分析

如果你发现你的一个消费者客户端A已经启动了,但是就是不消费消息,此时你应该检查一下该消费者所在的组中(ConsumerGroup)是否还有其他的消费者,topic的分区可能被组中其他的消费者线程抢走( ...

关于SVN提交时报out-of-date错误的解决方法

提交项目文件时,报如下的信息:Item is out-of-datesvn: Commit failed (details follow):svn: Item '/xxx/xxx/xxx/xxx/xx ...

write&sol;read&sol;send&sol;receive函数比较

建立好TCP连接后,就可以把得到的套接字当做文件描述符来使用,由此,联系到网络程序里的基本读写函数,write.read: l write函数: Ssize_t write(int fd,const ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值