对象数组的排序问题,设置对象某一属性的优先级最高

在实习期间的一个项目中,经理叫我将查询结果(是一个对象数组,项目中是租约信息的列表)按照地理位置的远近排序,并且当结果含有自己时显示在第一个。其实这样的功能是很常见的,网上很多解决方法,大多都是要写一个实现一个comparator的接口的比较器,然后调用Collections类的排序方法。但并不能解决我这里的要求,就是让某个属性有最高级。我想了很久,逐步调试,发现解决问题的方法就在比较器的实现上,最终把问题解决了。现在总结写了一个demo,原理一样,代码如下:

<span style="font-size:18px;">package mytest;

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 ObjectListTest {
  //Map<String,Object>就相当于对象,创建3个对象
    static List<Map<String,Object>> userList;  //对象数组
	Map<String, Object> user1,user2,user3;
	String id;
	
	public ObjectListTest(String myId){
	userList = new ArrayList<Map<String,Object>> ();
	user1 = new HashMap<String, Object>();
	user2 = new HashMap<String, Object>();
	user3 = new HashMap<String, Object>();
	user1.put("id", 1001);
	user1.put("name","张飞");
	user1.put("age", 26);
	user2.put("id", 1002);
	user2.put("name","关羽");
	user2.put("age", 30);
	user3.put("id", 1003);
	user3.put("name","刘备");
	user3.put("age", 33);
	userList.add(user1);
	userList.add(user2);
	userList.add(user3);
	
	Comparator<Map<String,Object>> comparator = new ComparatorImpl(myId);
        Collections.sort(userList, comparator); //调用系统的排序方法
	}
	
	//比较器实现类
	 class ComparatorImpl implements Comparator<Map<String,Object>>{
		  String user_id;
		  public ComparatorImpl(String userId){
			  this.user_id=userId;
		  }
		  
		  //比较器的实现方法
		  public int compare(Map<String,Object> user1,Map<String,Object> user2){
				if(user1!=null && user2!=null){
			  //显示自己的信息在第一位
				if(user1.get("id").toString().equals(user_id)){  
					return -1;
				}else if(user2.get("id").toString().equals(user_id)){  
					return 1;
				}
				//其他人按照年龄排序		
				if( Double.parseDouble(user1.get("age").toString()) > Double.parseDouble(user2.get("age").toString())){
					return 1;
				}else if(Double.parseDouble(user1.get("age").toString()) == Double.parseDouble(user2.get("age").toString())){
					return 0;
				}else 
					return -1;
			}
				return 1;
			}
	}
	
	
	public static void main(String[] args) {
              new ObjectListTest("1003");  //假设自己是关羽
              System.out.println(userList);
		
	}

}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值