分享好友 最新动态首页 最新动态分类 切换频道
java 集合存多种属性_Java关于list集合根据集合元素对象的某个或多个属性进行排序的工具类...
2024-12-26 20:40

import java.lang.reflect.Field;

java 集合存多种属性_Java关于list集合根据集合元素对象的某个或多个属性进行排序的工具类...

import java.text.NumberFormat;

import java.util.Collections;

import java.util.Comparator;

import java.util.Date;

import java.util.List;

public class ListUtils {

public static void sort(List list, final boolean isAsc, final String... sortnameArr) {

Collections.sort(list, new Comparator() {

public int compare(E a, E b) {

int ret = 0;

try {

for (int i = 0; i < sortnameArr.length; i++) {

ret = ListUtils.compareObject(sortnameArr[i], isAsc, a, b);

if (0 != ret) {

break;

}

}

} catch (Exception e) {

e.printStackTrace();

}

return ret;

}

});

}

public static void sort(List list, final String[] sortnameArr, final boolean[] typeArr) {

if (sortnameArr.length != typeArr.length) {

throw new RuntimeException("属性数组元素个数和升降序数组元素个数不相等");

}

Collections.sort(list, new Comparator() {

public int compare(E a, E b) {

int ret = 0;

try {

for (int i = 0; i < sortnameArr.length; i++) {

ret = ListUtils.compareObject(sortnameArr[i], typeArr[i], a, b);

if (0 != ret) {

break;

}

}

} catch (Exception e) {

e.printStackTrace();

}

return ret;

}

});

}

private static int compareObject(final String sortname, final boolean isAsc, E a, E b) throws Exception {

int ret;

Object value1 = ListUtils.forceGetFieldValue(a, sortname);

Object value2 = ListUtils.forceGetFieldValue(b, sortname);

String str1 = value1.toString();

String str2 = value2.toString();

if (value1 instanceof Number && value2 instanceof Number) {

int maxlen = Math.max(str1.length(), str2.length());

str1 = ListUtils.addZero2Str((Number) value1, maxlen);

str2 = ListUtils.addZero2Str((Number) value2, maxlen);

} else if (value1 instanceof Date && value2 instanceof Date) {

long time1 = ((Date) value1).getTime();

long time2 = ((Date) value2).getTime();

int maxlen = Long.toString(Math.max(time1, time2)).length();

str1 = ListUtils.addZero2Str(time1, maxlen);

str2 = ListUtils.addZero2Str(time2, maxlen);

}

if (isAsc) {

ret = str1.compareTo(str2);

} else {

ret = str2.compareTo(str1);

}

return ret;

}

public static String addZero2Str(Number numObj, int length) {

NumberFormat nf = NumberFormat.getInstance();

// 设置是否使用分组

nf.setGroupingUsed(false);

// 设置最大整数位数

nf.setMaximumIntegerDigits(length);

// 设置最小整数位数

nf.setMinimumIntegerDigits(length);

return nf.format(numObj);

}

public static Object forceGetFieldValue(Object obj, String fieldName) throws Exception {

Field field = obj.getClass().getDeclaredField(fieldName);

Object object = null;

boolean accessible = field.isAccessible();

if (!accessible) {

// 如果是private,protected修饰的属性,需要修改为可以访问的

field.setAccessible(true);

object = field.get(obj);

// 还原private,protected属性的访问性质

field.setAccessible(accessible);

return object;

}

object = field.get(obj);

return object;

}

最新文章
风险不安全:盛腾科技网络“交友”被骗经历:不要尝试都是套路
某天晚上,柳先生玩手机,浏览到一个网站,里面弹出一个链接被骗信用分不足无法出金,在好奇心的驱使下,柳先生下载了被骗信用分不足无法出金,进入之后,有被骗信用分不足无法出金平台的客服来联系柳先生,被骗信用分不足无法出金平台客服
网站搜索引擎优化,提升网站流量与用户体验的关键策略,SEO秘籍,优化网站,倍增流量与提升用户体验之道
网站搜索引擎优化(SEO)是提升网站流量与用户体验的关键。通过优化关键词、提高网站速度、改善内容质量、优化内部链接和移动端适应性等策略,有效提高网站在搜索引擎中的排名,吸引更多用户访问,提升用户体验。SEO还能增强网站品牌形象,
郑州中学招聘的长尾关键词有哪些
【郑州中学招聘】长尾关键词有很多,郑州信息发布网为您整理各个搜索引擎的相关长尾关键词:百度的相关长尾关键词:郑州中学招聘2024公告最新,郑州中学招聘教师公告2023,郑州中学招聘教师公告,郑州中学招聘教师公告2024,郑州中学招聘教师,
直播平台云服务器租赁及流量费废标公告
一、项目基本情况采购项目编号:QXTD-2024030058 采购项目名称:直播平台云服务器租赁及流量费 二、项目终止的原因直播平台云服务器租赁及流量费:实质响应本项目的招标文件的投标商不足三家三、其他补充事宜采购日期:2024-12-03定标日期:
探索GoDaddy空间,一站式网站托管与域名服务解决方案,godaddy空间怎么样
在数字化时代,无论是个人博客、中小企业还是大型公司,拥有一个在线平台都是至关重要的,而选择正确的网站托管和域名服务供应商,可以为您的在线业务打下坚实的基础,GoDaddy作为全球知名的网站托管和域名服务提供商,为各种规模的企业提
菜鸟裹裹怎么绑定手机吗?可以绑定多个手机号吗?
  菜鸟裹裹对于那些经常网购的朋友来说,绝对是一款福利助手软件,在菜鸟裹裹上,你不仅可以追踪包裹物流动态,还能帮助客户随时收发快递,如果你绑定有手机,即便非淘宝订单的物流信息在菜鸟裹裹上也是有所显示的呐,可是,你知道菜鸟裹
站内外SEO全解析,优化策略与技巧深度分享
本文全面解析站外SEO与站内SEO,深入探讨优化策略与技巧。站外SEO通过外部链接提升网站权重,站内SEO关注内容质量与关键词布局。文章分享了关键词研究、内容创作、链接建设等实战方法,助你提升网站搜索引擎排名。随着互联网的不断发展,搜
论坛隐藏链接获取_几种获取外链的常用方法
在这里,柒点传媒给大家分享几种获取外链的常用方法。百度知道是百度旗下的一个重要产品,它自身的权重就非常高。很多难度大的关键词,都可以利用百度知道这一利器来提升排名。百度知道也有不少操作细节要注意,比
华为12月多款新品曝光 智能家居成焦点
12月2日,数码博主“看山的叔叔”透露,华为在12月似乎没有重要的新品发布计划,目前也没有2000元以上产品的消息,只有一些入门级的平板和手机。此前有消息称,华为或在12月24日举办新品发布会,产品可能主要涉及智能家居领域,但这一消息
相关文章
推荐文章
发表评论
0评