List集合排序

  • Collections.sort(集合)排序
	/*直接按值的大小排序*/
	public static void main(String[] args) {
		List<Integer> nums = new ArrayList<Integer>();
		nums.add(100);
		nums.add(8);
		nums.add(6);
		nums.add(10);
		System.out.println("排序前:"+nums);
		Collections.sort(nums);
		System.out.println("排序后:"+nums);
	}

输出为:
排序前:[100, 8, 6, 10]
排序后:[6, 8, 10, 100]

  • List<Map<String, Object>>某个key值的大小排序
	public static void main(String[] args) {
		List<Map<String, Object>> arrayList2 = new ArrayList<Map<String, Object>>();
		Map<String, Object> map1 = new HashMap<String, Object>();
		Map<String, Object> map2 = new HashMap<String, Object>();
		Map<String, Object> map3 = new HashMap<String, Object>();
		map1.put("aa", -1.1);
		map2.put("aa", 2.2);
		map3.put("aa", -3.2);
		map1.put("bb", -10);
		map2.put("bb", 2);
		map3.put("bb", -6.6);
		arrayList2.add(map1);
		arrayList2.add(map2);
		arrayList2.add(map3);
		sortTableDataByKeyName(arrayList2,"bb");
		for(int a = 0 ; a<arrayList2.size();a++) {
			System.out.println("aa:"+arrayList2.get(a).get("aa")+" bb:"+arrayList2.get(a).get("bb"));
		}
	}
	public static void sortTableDataByKeyName(List<Map<String,Object>> marketUnitList,final String KeyName){
		Collections.sort(marketUnitList,new Comparator<Map<String,Object>>(){
			@Override
			public int compare(Map<String, Object> o1,Map<String, Object> o2) {
				if(!"".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
					return 0;
				}else if("".equals(o1.get(KeyName)) && !"".equals(o2.get(KeyName))){
					return 0;
				}else if("".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
					return 0;
				}else{
					BigDecimal o1B = new BigDecimal(o1.get(KeyName).toString());
					BigDecimal o2B = new BigDecimal(o2.get(KeyName).toString());
					
					Double o1I = o1B.doubleValue();
					Double o2I = o2B.doubleValue();
					return o2I.compareTo(o1I);
				}
			}
		});
	}

输出为:
aa:2.2 bb:2
aa:-3.2 bb:-6.6
aa:-1.1 bb:-10

  • List<Map<String, Object>>中某个key值的绝对值排序
	public static void main(String[] args) {
			List<Map<String, Object>> arrayList1 = new ArrayList<Map<String, Object>>();
			List<Map<String, Object>> arrayList2 = new ArrayList<Map<String, Object>>();
			Map<String, Object> map1 = new HashMap<String, Object>();
			Map<String, Object> map2 = new HashMap<String, Object>();
			Map<String, Object> map3 = new HashMap<String, Object>();
			map1.put("aa", -1.1);
			map2.put("aa", 2.2);
			map3.put("aa", -3.342);
			map1.put("bb", -10.909);
			map2.put("bb", 9.22);
			map3.put("bb", -60.6789);
			arrayList1.add(map1);
			arrayList1.add(map2);
			arrayList1.add(map3);
			for(int a= 0 ; a<arrayList1.size();a++) {
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("aa", arrayList1.get(a).get("aa"));
					if(arrayList1.get(a).get("bb")==null){
						map.put("bb",arrayList1.get(a).get("bb"));
					}else {
						map.put("bb", Double.valueOf(arrayList1.get(a).get("bb").toString()));
					}
				arrayList2.add(map);
			}
			
			sortTableDataByKeyName(arrayList1,"bb");
			for(int a = 0 ; a<arrayList1.size();a++) {
				System.out.println("aa:"+arrayList1.get(a).get("aa")+" bb:"+arrayList1.get(a).get("bb"));
			}
		}
		public static void sortTableDataByKeyName(List<Map<String,Object>> marketUnitList,final String KeyName){
			Collections.sort(marketUnitList,new Comparator<Map<String,Object>>(){
				@Override
				public int compare(Map<String, Object> o1,Map<String, Object> o2) {
					if(o1.get(KeyName)==null||o2.get(KeyName)==null) {
						return -1;
					}
						if(!"".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
							return 0;
						}else if("".equals(o1.get(KeyName)) && !"".equals(o2.get(KeyName))){
							return 0;
						}else if("".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
							return 0;
						}else{
							BigDecimal o1B = new BigDecimal(o1.get(KeyName).toString());
							BigDecimal o2B = new BigDecimal(o2.get(KeyName).toString());
							Double o1I = Math.abs(o1B.doubleValue());
							Double o2I = Math.abs(o2B.doubleValue());
							return o2I.compareTo(o1I);
						}
					}
			});
		}

输出为:
aa:-3.342 bb:-60.6789
aa:-1.1 bb:-10.909
aa:2.2 bb:9.22

  • 单属性list,自定义顺序排序
public static void main(String[] args) {
		List<String> list = Arrays.asList("北京","上海","广州","北京","广州");
		List<String> sortRule = Arrays.asList("北京","上海","广州");
		System.out.println("原始数据:"+list);
		System.out.println("排序规则:"+sortRule);
		Collections.sort(list,new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				int a1 = sortRule.indexOf(o1);
				int a2 = sortRule.indexOf(o2);
				return a1-a2;
			}
		});
		System.out.println("正序排列:"+list);
		Collections.sort(list,new Comparator<String>(){
			@Override
			public int compare(String o1, String o2) {
				int a1 = sortRule.indexOf(o1);
				int a2 = sortRule.indexOf(o2);
				return a2 - a1 ;
			}
		});
		System.out.println("倒序排列:"+list);
	}

输出为:
原始数据:[北京, 上海, 广州, 北京, 广州]
排序规则:[北京, 上海, 广州]
正序排列:[北京, 北京, 上海, 广州, 广州]
倒序排列:[广州, 广州, 上海, 北京, 北京]

  • 对象自定义多属性的顺序排序
public static void main(String[] args) {
		List<Stu> stu = new ArrayList<>();
		stu.add(new Stu("二逗",60,173,"浙大","北京"));
		stu.add(new Stu("小豆",65,176,"郑大","郑州"));
		stu.add(new Stu("二逗",63,174,"武大","上海"));
		stu.add(new Stu("大豆",66,183,"北大","郑州"));
		stu.add(new Stu("小豆",56,178,"交大","上海"));
		stu.add(new Stu("小豆",58,175,"交大","上海"));
		System.out.println("原始数据:");
		for (Stu s : stu) {
			System.out.println(s.getName()+" "+s.getWeight()+" "+s.getHeight()+" "+s.getSchool()+" "+s.getAddress());
		}
		System.out.println("先按照(大豆 二逗 小豆)排序,当名称相同时按照(北京 上海 郑州)排序,当名称和地区都相同时按照身高降序排序:");
		List<String> nameOrder = Arrays.asList("大豆","二逗","小豆");
		List<String> addressOrder = Arrays.asList("北京","上海","郑州");
		Collections.sort(stu,new Comparator<Stu>() {
			@Override
			public int compare(Stu stu1, Stu stu2) {
				if(stu1.getName().equals(stu2.getName())) {
					if(stu1.getAddress().equals(stu2.getAddress())){
						return stu2.getHeight()-stu2.getHeight();
					}else {
						int a1 = addressOrder.indexOf(stu1.getAddress());
						int a2 = addressOrder.indexOf(stu2.getAddress());
						return a1 - a2;
					}
				}else {
					int a1 = nameOrder.indexOf(stu1.getName());
					int a2 = nameOrder.indexOf(stu2.getName());
					return a1 - a2;
				}
			}
		});
		for (Stu s : stu) {
			System.out.println(s.getName()+" "+s.getWeight()+" "+s.getHeight()+" "+s.getSchool()+" "+s.getAddress());
		}
	}

输出为:
原始数据:
二逗 60 173 浙大 北京
小豆 65 176 郑大 郑州
二逗 63 174 武大 上海
大豆 66 183北大 郑州
小豆 56 178 交大 上海
小豆 58 175 交大 上海
先按照(大豆 二逗 小豆)排序,当名称相同时按照(北京 上海 郑州)排序,当名称和地区都相同时按照身高降序排序:
大豆 66 183 北大 郑州
二逗 60 173 浙大 北京
二逗 63 174 武大 上海
小豆 56 178 交大 上海
小豆 58 175 交大 上海
小豆 65 176 郑大 郑州

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值