2016-08-05 2 views
0

В настоящее время я работаю над проектом, который находится на Java 4, и мне нужно отсортировать ArrayList на 2 значения. Это ArrayList of ClassTest.Java 4: Сортировка массива на 2 значения

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

Моя проблема заключается в том, что я должен сортировать сначала по коду, а затем по ближайшей дате текущей даты. Я нахожусь в Java 4, и я не могу использовать много вещей, которые я обычно использую для сортировки массива вроде Comparator<ClassTest>.

Может кто-нибудь помочь найти алгоритм, который не слишком медленный, пожалуйста?

Спасибо.

+1

Конечно, вы можете использовать 'Comparator'. Это будет просто не общий. – Kayaman

+0

проверить это - http://www.cs.fsu.edu/~myers/cop3252/notes/examples/sorting/Sorting2Old.java – NageN

+0

Эта версия не поддерживается в течение многих лет. – sstan

ответ

0

Используя интерфейс Comparator без дженериков (< ..>)

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

Это будет не общий, но да, и «Сравнительный», и «Компаратор» будут работать нормально. – Kayaman

+0

На самом деле в моей версии Java (1.4) я не могу использовать «», потому что он сказал, что он реализован в java 1.5. – user3659739

Смежные вопросы