对象比较器--List集合对象排序根据对象中某个字段(seriesdata)比较排序

本文介绍了一种使用Java对包含特定字段的对象列表进行排序的方法。通过自定义比较器,实现了根据seriesdata字段对Map对象列表进行升序排序。示例代码展示了如何创建Map对象,填充数据,并使用Collections.sort()方法结合匿名内部类Comparator实现排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据对象中某个字段(seriesdata)比较排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ComparatorListObject {

	public static List<Map<String, String>> getSortList(List<Map<String, String>> datas) {
		Collections.sort(datas, new Comparator<Map<String, String>>() {
			@Override
			public int compare(Map<String, String> o1, Map<String, String> o2) {
				if (null != o1 && null != o2 && null != o1.get("seriesdata") && null != o1.get("seriesdata")) {
					int num1 = Integer.valueOf(o1.get("seriesdata"));
					int num2 = Integer.valueOf(o2.get("seriesdata"));
					if (num1 < num2) {
						return 1;
					} else if (num1 == num2) {
						return 0;
					} else {
						return -1;
					}
				}
				return 0;
			}
		});
		return datas;
	}

	public static void main(String[] args) {
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		Map<String, String> map1 = new HashMap<String, String>();
		map1.put("catagory", "三方存管变更");
		map1.put("catagoryid", "3411225");
		map1.put("seriesdata", "5");
		list.add(map1);
		Map<String, String> map2 = new HashMap<String, String>();
		map2.put("catagory", "辅助资金户开户");
		map2.put("catagoryid", "4411005");
		map2.put("seriesdata", "7");
		list.add(map2);
		Map<String, String> map3 = new HashMap<String, String>();
		map3.put("catagory", "test111");
		map3.put("catagoryid", "111111");
		map3.put("seriesdata", "3");
		list.add(map3);
		System.out.println(list);
		list = getSortList(list);
		System.out.println(list);

	}
}
[{catagory=三方存管变更, catagoryid=3411225, seriesdata=5}, {catagory=辅助资金户开户, catagoryid=4411005, seriesdata=7}, {catagory=test111, catagoryid=111111, seriesdata=3}]
[{catagory=辅助资金户开户, catagoryid=4411005, seriesdata=7}, {catagory=三方存管变更, catagoryid=3411225, seriesdata=5}, {catagory=test111, catagoryid=111111, seriesdata=3}]

public class Comparators { public static java.util.Comparator getComparator() { return new java.util.Comparator() { public int compare(Object o1, Object o2) { if (o1 instanceof String) { return compare( (String) o1, (String) o2); } else if (o1 instanceof Integer) { return compare( (Integer) o1, (Integer) o2); } else if (o1 instanceof Person) { return compare( (Person) o1, (Person) o2); } else { System.err.println("未找到合适的比较器"); return 1; } } public int compare(String o1, String o2) { String s1 = (String) o1; String s2 = (String) o2; int len1 = s1.length(); int len2 = s2.length(); int n = Math.min(len1, len2); char v1[] = s1.toCharArray(); char v2[] = s2.toCharArray(); int pos = 0; while (n-- != 0) { char c1 = v1[pos]; char c2 = v2[pos]; if (c1 != c2) { return c1 - c2; } pos++; } return len1 - len2; } public int compare(Integer o1, Integer o2) { int val1 = o1.intValue(); int val2 = o2.intValue(); return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); } public int compare(Boolean o1, Boolean o2) { return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1)); } public int compare(Person o1, Person o2) { String firstname1 = o1.getFirstName(); String firstname2 = o2.getFirstName(); String lastname1 = o1.getLastName(); String lastname2 = o2.getLastName(); Boolean sex1 = o1.getSex(); Boolean sex2 = o2.getSex(); Integer age1 = o1.getAge(); Integer age2 = o2.getAge(); return (compare(firstname1, firstname2) == 0 ? (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 : compare(age1, age2)) : compare(sex1, sex2)) : compare(lastname1, lastname2)) : compare(firstname1, firstname2)); } }; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nizhengjia888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值