分享好友 行情首页 行情分类 切换频道
java 对多个元素对象的排序_Java关于list集合根据集合元素对象的某个或多个属性进行排序的工具类...
2024-12-26 21:44  浏览:67

import java.lang.reflect.Field;

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;

}

    以上就是本篇文章【java 对多个元素对象的排序_Java关于list集合根据集合元素对象的某个或多个属性进行排序的工具类...】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/6829.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
手机特别卡怎么办
在现代生活中,手机已经成为我们不可或缺的伙伴。然而,随着使用时间的增长,不少用户会遇到手机变得特别卡的问题。这不仅影响了
抖音外链建设规划与执行方案100
外链建设目标* 提高网站在抖音平台的可见度和影响力* 为网站获取高质量的流量* 提升网站的搜索引擎排名外链建设策略1. 分析竞争
李丁夫最新任命,引领科技革新重塑生活体验领袖
李丁夫最新任命,将引领科技潮流并重塑生活体验。他的上任标志着新一轮科技革新和优质生活体验的开始,致力于将最新的科技应用于
淘宝运营
岗位职责:1、负责淘宝店铺的日常运营,熟悉天猫、C店的运营环境、交易规则、分析店铺销售目标并落实执行;2、负责天猫店铺推广
实时更新:呼和浩特直达到海东汽车托运2024讲信誉+排名一览
  呼和浩特到海东专线物流、呼和浩特到海东物流专线、呼和浩特到海东回头车、绥化回程货车、大型机器设备运输。我们的司机具备
梦幻西游:盘点游戏中的热门召唤兽——人形篇
  自梦幻西游诞生以来,人气最高的召唤兽就是人型宠。时至今日,这个群体已经太过庞大,小编整理过后,将其分解为人形篇、精怪
医保管理精细化 医院有何“妙招”
医保制度改革深化,对医院医保管理的要求也随之提档升级。整合医、教、科等业务系统和人、财、物等资源,推动医院运营管理精细化
白天黑夜宝宝巴士小百科
白天黑夜宝宝巴士小百科,一般又称白天黑夜app。
考研教育/建模/原画/插画/考公等教育投放b站广告效果解析
2022年08月26日陈建贵100资深效果广告开户代运营公司,小红书、B站信息流广告,达人探店种草,抖音千川,腾讯视频号等广告开户代
排名展现:重庆男科医院排行榜前五的男科医院-重庆治疗早泄哪家医院好
排名展现:重庆男科医院排行榜前五的男科医院-重庆治疗早泄哪家医院好。重庆男科医院排名:1、重庆红楼医院,2、重庆红楼医院男
本企业新闻
推荐企业新闻
发表评论
0评