2016-08-05 64 views
0

我目前正在研究Java 4中的projet,並且我必須對2個ArrayList排序。 這是ClassTest的ArrayList。Java 4:按2值對數組排序

public class ClassTest{  
    String code; // "01", "02" or "03". 
    String date; // 01/01/2001. 
} 

我的問題是,我必須首先按代碼排序,然後按當前日期的最近日期排序。 我在Java 4,我不能使用很多東西,我通常用於排序像Comparator<ClassTest>陣列。

有人可以幫助找到一個不太慢的算法嗎?

感謝。

+1

當然,您可以使用「比較器」。它只是一個非通用的。 – Kayaman

+0

請查看 - http://www.cs.fsu.edu/~myers/cop3252/notes/examples/sorting/Sorting2Old.java – NageN

+0

該版本多年來一直不受支持。 – sstan

回答

0

使用比較接口而不泛型(< ..>)

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.Date; 
import java.util.List; 

public class CollectionSorter { 

    public static void main(String args[]) { 
     ClassTest obj1 = new ClassTest(); 
     obj1.setCode("01"); 
     obj1.setDate("2001-02-01"); 
     ClassTest obj2 = new ClassTest(); 
     obj2.setCode("01"); 
     obj2.setDate("2001-01-01"); 
     ClassTest obj3 = new ClassTest(); 
     obj3.setCode("02"); 
     obj3.setDate("2001-01-01"); 

     List list = new ArrayList(); 
     list.add(obj1); 
     list.add(obj2); 
     list.add(obj3); 
     System.out.println("Before sorting - " + list); 
     Collections.sort(list, new ClassTestComparator()); 
     System.out.println("After sorting - " + list); 
    } 

} 

class ClassTest{  
    private String code; // "01", "02" or "03". 
    private String date; // 01/01/2001. 

    public String getCode() { 
     return code; 
    } 

    public void setCode(String code) { 
     this.code = code; 
    } 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public String toString() 
    { 
     return "[code: " + code + ", date: " + date + "]"; 
    } 
} 

class ClassTestComparator implements Comparator { 

    public int compare(Object o1, Object o2) { 
     ClassTest obj1 = (ClassTest) o1; 
     ClassTest obj2 = (ClassTest) o2; 
     int code1 = Integer.parseInt(obj1.getCode()); 
     int code2 = Integer.parseInt(obj2.getCode()); 
     int result = 0; 
     if(code1 > code2) { 
      result = 1; 
     } 
     if(code1 < code2) { 
      result = -1; 
     } 
     if (result != 0) { 
      return result; 
     } 

     // Sort by Date ("by the closest date of the current date") 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     Date date1 = null; 
     Date date2 = null; 
     try { 
      date1 = sdf.parse(obj1.getDate()); 
      date2 = sdf.parse(obj2.getDate()); 
     } catch(ParseException e) { 
      e.printStackTrace(); 
     } 
     if(date1.compareTo(date2)>0){ 
      result = 1; 
     }else if(date1.compareTo(date2)<0){ 
      result = -1; 
     }else if(date1.compareTo(date2)==0){ 
      result = 0; 
     } 
     return result; 
    } 

} 

注:代碼在Java 1.4版本中測試,並按預期工作

1

我不知道,如果在你的Java版本,這是可能的,但也許你可以試試這個方法:

public class ClassTest implements Comparable<ClassTest> { 
    String code; // "01", "02" or "03". 
    String date; // 01/01/2001. 

    @Override 
    public int compareTo(ClassTest ct) { 
     // Sort by Code 
     result = code.compateTo(ct.code); 
     if (result != 0){return result;} 

     // Sort by Date ("by the closest date of the current date") 
     result = (...) 
     return result; 
    } 
} 

然後你可以叫

Collections.sort(yourArrayListOfClassTest); 
+0

它將是非泛型的,但是是'Comparable'和'Comparator'都可以正常工作。 – Kayaman

+0

實際上,在我的Java版本(1.4)中,我不能使用「」,因爲它表示它已經在java 1.5中實現。 – user3659739