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

来源:互联网 发布:如何手机秒杀淘宝商品 编辑:程序博客网 时间:2024/05/29 18:34

在实习期间的一个项目中,经理叫我将查询结果(是一个对象数组,项目中是租约信息的列表)按照地理位置的远近排序,并且当结果含有自己时显示在第一个。其实这样的功能是很常见的,网上很多解决方法,大多都是要写一个实现一个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>


0 0
原创粉丝点击