List<HashMap<String, Object>> results = 
[{CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:10 CST 2009,OBJECTID=15}, 
{CAR_NO=9507, SENDTIME=Fri Aug 03 12:00:30 CST 2029,OBJECTID=4}, 
{CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=370}, 
{CAR_NO=9507, SENDTIME=Mon Aug 03 12:00:20 CST 2009,OBJECTID=3}, 
{CAR_NO=9507, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=18},  
{CAR_NO=9507, SENDTIME=Mon Aug 03 12:00:00 CST 2009,OBJECTID=1}, 
{CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:20 CST 2009,OBJECTID=16}, 
{CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:30 CST 2009,OBJECTID=17}, 
{CAR_NO=9507, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=338}, 
{CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=386}, 
{CAR_NO=9508, SENDTIME=Mon Aug 03 12:00:21 CST 2009,OBJECTID=12}]
帮忙写个方法,需要返回一个包含9507,9508,9509这三个NO的最后时间的结果,如下
[{CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:30 CST 2009,OBJECTID=17}, 
{CAR_NO=9507, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=338}, 
{CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=370},]

解决方案 »

  1.   

    List中只有一个Map吗?
    还是有好多Map,但每个Map中只有一条数据?
      

  2.   


    import java.util.Date;
    public class SortClass implements Comparable<SortClass>{

    private String car_no;
    private Date sendTime;
    private String objectId;
    /**
     * @return the car_no
     */
    public SortClass(String no,Date time,String id)
    {
    car_no=no;
    sendTime=time;
    objectId=id;
    }
    public String getCar_no() {
    return car_no;
    }
    /**
     * @return the sendTime
     */
    public Date getSendTime() {
    return sendTime;
    } public String getObjectId() {
    return objectId;
    }
    public int compareTo(SortClass sortClass)
    {
    if(sendTime.before(sortClass.sendTime))
    return 1;
    if(sendTime.after(sortClass.sendTime))
    return -1;
    return 0;

    }}import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;
    public class Test {    public static void main(String[] args) throws ParseException
        {
         Map <String, String> results =new HashMap <String, String>();  
         SortClass[] sortClassArray=new SortClass[11];
            SimpleDateFormat sd=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
            Date date=sd.parse("Mon Aug 03 12:00:10 CST 2009");
         sortClassArray[0]=new SortClass("9509",date,"15");
         date=sd.parse("Fri Aug 03 12:00:30 CST 2009");
         sortClassArray[1]=new SortClass("9507",date,"4");
         date=sd.parse("Fri Jan 01 01:00:00 CST 2010");
         sortClassArray[2]=new SortClass("9508",date,"370");
         date=sd.parse("Mon Aug 03 12:00:20 CST 2009");
         sortClassArray[3]=new SortClass("9507",date,"3");
         date=sd.parse("Fri Jan 01 01:00:00 CST 2010");
         sortClassArray[4]=new SortClass("9507",date,"18");
         date=sd.parse("Mon Aug 03 12:00:00 CST 2009");
         sortClassArray[5]=new SortClass("9507",date,"1");
         date=sd.parse("Mon Aug 03 12:00:20 CST 2009");
         sortClassArray[6]=new SortClass("9509",date,"16");
         date=sd.parse("Mon Aug 03 12:00:30 CST 2009");
         sortClassArray[7]=new SortClass("9509",date,"17");
         date=sd.parse("Fri Jan 01 01:02:00 CST 2010");
         sortClassArray[8]=new SortClass("9507",date,"338");
         date=sd.parse("Fri Jan 01 01:00:00 CST 2010");
         sortClassArray[9]=new SortClass("9508",date,"386");
         date=sd.parse("Mon Aug 03 12:00:21 CST 2009");
         sortClassArray[10]=new SortClass("9508",date,"12");
         Arrays.sort(sortClassArray);
         for(SortClass sortClass:sortClassArray)
         {
         if(!results.containsKey(sortClass.getCar_no()))
         {
         results.put(sortClass.getCar_no(),"CAR_NO="+sortClass.getCar_no()+", "+"SENDTIME="+sortClass.getSendTime()+", "+"OBJECTID="+sortClass.getObjectId());
         }
         }
         for(String key:results.keySet())
         {
         System.out.println(results.get(key));
         }   
        }
    }结果:
    CAR_NO=9507, SENDTIME=Fri Jan 01 01:02:00 CST 2010, OBJECTID=338
    CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010, OBJECTID=370
    CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:30 CST 2009, OBJECTID=17
      

  3.   

    import java.util.*;
    import java.text.*;class Test6 {
    public static String data = "CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:10 CST 2009,OBJECTID=15|  "+
                                " CAR_NO=9507, SENDTIME=Fri Aug 03 12:00:30 CST 2009,OBJECTID=4|  "+
                                " CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=370|"+
                                " CAR_NO=9507, SENDTIME=Mon Aug 03 12:00:20 CST 2009,OBJECTID=3|  "+
                                " CAR_NO=9507, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=18| "+
                                " CAR_NO=9507, SENDTIME=Mon Aug 03 12:00:00 CST 2009,OBJECTID=1|  "+
                                " CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:20 CST 2009,OBJECTID=16| "+
                                " CAR_NO=9509, SENDTIME=Mon Aug 03 12:00:30 CST 2009,OBJECTID=17| "+
                                " CAR_NO=9507, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=338|"+
                                " CAR_NO=9508, SENDTIME=Fri Jan 01 01:00:00 CST 2010,OBJECTID=386|"+
                                " CAR_NO=9508, SENDTIME=Mon Aug 03 12:00:21 CST 2009,OBJECTID=12| ";
                                

        //先把你给的数据放到你给的容器中,三种数据的Object不知道你原来是什么类型,CAR_NO和OBJECTID,我处理为Integer,SENDTIME处理为Date。
        //
        public List<HashMap <String, Object>> getList(String data) throws Exception{
         List<HashMap <String, Object>> myList=new ArrayList <HashMap <String, Object>>();
         SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
         String[] mapDataString=data.split("\\|\\s*");
         for(String strInMap:mapDataString){
         String[] mapData=strInMap.split(",\\s*");
         HashMap <String, Object> newMap=new HashMap <String, Object>();
     
         String[] carNo=mapData[0].split("=");
         newMap.put(carNo[0],new Integer(carNo[1]));
        
         String[] sendTime=mapData[1].split("=");
         newMap.put(sendTime[0],sdf.parse(sendTime[1]));
        
         String[] objectId=mapData[2].split("=");
         newMap.put(objectId[0],new Integer(objectId[1]));
        
         myList.add(newMap);
         }
         return myList;
        }
        
        //从原始数据中把最后时间的数据提出来,以List<HashMap <String, Object>>形式返回。
        //
        public List<HashMap <String, Object>> getDataOfLastTime(List<HashMap <String, Object>> myList){ 
        
         //定义下面这个HashMap<String,HashMap<String,Object>>是为了把最后的时间的数据筛选出来。
         //key为CAR_NO,value是myList中的一个HashMap.
         //
         HashMap<Integer,HashMap<String,Object>> filter=new HashMap<Integer,HashMap<String,Object>>();
        
         //下面的算法就是把myList中的每一个HashMap拿出来,与filter中的相同CAR_NO对应的HashMap比较。
         //比较的依据是SENDTIME.把大的放入filter中。
         //
         for(HashMap<String,Object> dataMap: myList){
         Integer carNo=(Integer)dataMap.get("CAR_NO");
         Date sendDate=(Date)dataMap.get("SENDTIME");
         if(filter.get(carNo)!=null){
         Date sendDate2=(Date)filter.get(carNo).get("SENDTIME");
         if(sendDate.compareTo(sendDate2)>0){
         filter.put(carNo,dataMap);
         }
         }else{
         filter.put(carNo,dataMap);
         }
         }
         return new ArrayList<HashMap <String, Object>>(filter.values());
        }
        
        //把List<HashMap <String, Object>>中的数据打印出来。
        //
        public void printList(List<HashMap <String, Object>> myList){
         System.out.println("Car_No          SendTime              ObjectId ");
         for(HashMap<String,Object> mapData : myList){
         System.out.println(mapData.get("CAR_NO")+"     "+mapData.get("SENDTIME")+"     "+mapData.get("OBJECTID"));
         }
        }
        
        public static void main(String[] args) throws Exception{
         Test6 test=new Test6();
         System.out.println("原始数据:");
         List<HashMap <String, Object>> myList=test.getList(data);
         test.printList(myList);
         System.out.println("\n筛选后的数据:");
         test.printList(test.getDataOfLastTime(myList));
          
        }
    }
    F:\java>java Test6
    原始数据:
    Car_No          SendTime              ObjectId
    9509     Mon Aug 03 12:00:10 CST 2009     15
    9507     Mon Aug 03 12:00:30 CST 2009     4
    9508     Fri Jan 01 01:00:00 CST 2010     370
    9507     Mon Aug 03 12:00:20 CST 2009     3
    9507     Fri Jan 01 01:00:00 CST 2010     18
    9507     Mon Aug 03 12:00:00 CST 2009     1
    9509     Mon Aug 03 12:00:20 CST 2009     16
    9509     Mon Aug 03 12:00:30 CST 2009     17
    9507     Fri Jan 01 01:00:00 CST 2010     338
    9508     Fri Jan 01 01:00:00 CST 2010     386
    9508     Mon Aug 03 12:00:21 CST 2009     12筛选后的数据:
    Car_No          SendTime              ObjectId
    9507     Fri Jan 01 01:00:00 CST 2010     18
    9508     Fri Jan 01 01:00:00 CST 2010     370
    9509     Mon Aug 03 12:00:30 CST 2009     17
      

  4.   

    有一个注释写的不对://定义下面这个HashMap<String,HashMap<String,Object>>是为了把最后的时间的数据筛选出来。
    //key为CAR_NO,value是myList中的一个HashMap改为:
    //定义下面这个HashMap<Integer,HashMap<String,Object>>是为了把最后的时间的数据筛选出来。
    //key为CAR_NO,value是myList中的一个HashMap
      

  5.   

    再改一下这个注释.
    我老是描述不清我的想法.//定义下面这个HashMap<Integer,HashMap<String,Object>>是为了把最后的时间的数据筛选出来。
    //key为CAR_NO,value是myList中的与key中的CAR_NO对应的HashMap.
     //