多字段 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
<t> Comparator createComparator(
int
sort, String... filed) {
return
new
ImComparator(sort, filed);
}
public
static
class
ImComparator
implements
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
(!(value1
instanceof
Integer) || !(value1
instanceof
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<labelalbum> list =
new
ArrayList<labelalbum>();
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());
}
}
}</labelalbum></labelalbum></t>
多字段 java对象排序的更多相关文章
- 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<Field>{ private String name; private ...
- [Java] 对象排序示例
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 以 ...
- [个人原创]关于java中对象排序的一些探讨(三)
这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...
随机推荐
- C# Emit动态代理生成一个实体对象
/// <summary> /// 使用Emit动态代理收集实体信息 /// </summary> /// <typeparam name="T"&g ...
- VS2015新建asp.net core站点
摘要 电脑上安装了vs2015,今天就尝尝鲜,新建一个项目试试. BBS 使用vs2015新建一个解决方案,然后新建项目,此时你会发现没有asp.net core项目,这就需要先安装asp.net c ...
- 【8-23】MFC学习笔记 01
太难了,慢慢学....
- 如何在JDK1.8中愉快地处理日期和时间
如何在JDK1.8中愉快地处理日期和时间 JDK1.8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. ...
- html中 table的结构 彻底搞清 caption th thead等
正因为有太多 随意 称呼的 教法, 所以 感到很困惑, 如, 很多人把th叫标题. 那人家 caption怎么想, th只是一个跟td一样的角色, 只是对他进行加粗 加黑了而已, 用于某些单元格的内容 ...
- 黑客攻防技术宝典Web实战篇(二)工具篇
扫描工具.中间攻击工具.加密解密工具等. 1 TM Thread Module 2 burpsuite 代理.中间攻击.repeatur.spider.暴力破解(intrude).加密.解密.扫描器 ...
- 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解
序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...
- 2015年12月01日 GitHub入门学习(三)GitHub创建仓库
序:创建自己的GITHub账号,并创建自己第一个仓库,尝试通过msysgit客户端,往仓库提交文件. 一.创建GitHub账户 链接地址:https://github.com/join,很简单,自己创 ...
- Google翻译请求(难点是tk参数)
业务需求需要将一些文字翻译一下··· 但是直接调用接口收费啊啊啊啊(貌似是前几百万字免费,然后就开始收费了)···· 就想研究一下Google翻译接口... 想模拟Google向服务器发送一个Http ...
- js(jquery)代码在页面上实时地显示时间
一.引入jquery 二.HTML代码 三.js代码 1)引入js代码 2)下面是完整的js代码