2012-04-23 24 views
0

我有一些问题排序数组,我希望排序的日期可以是星期一,星期二,星期三,星期四或星期五。我有一个能够显示数组内所有内容的类,但是我想在上面的日子里点这个,我该怎么做?android排序数组

我试过使用collections.sort和Arrays.sort,但似乎没有给我想要的效果,任何想法?

public void sortArray() { 



} 

12月4日至23日:55:49.010:E/AndroidRuntime(281):致命异常:主 12月4日至23日:55:49.010:E/AndroidRuntime(281):了java.lang.RuntimeException:无法启动活动ComponentInfo {org.assignment.timetable/org.assignment.timetable.Timetable}:java.lang.NullPointerException 04-23 12:55:49.010:E/AndroidRuntime(281):at android.app.ActivityThread。 (ActivityThread.java:2679) 04-23 12:55:49.010: E/AndroidRuntime(281):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 04-23 12 :55:49.010:E/AndroidRuntime(281):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 04-23 12:55:49.010:E/AndroidRuntime(281):at android.os .Handler.dispatchMessage(Handler.java:99) 04-23 12:55:49.010:E/AndroidRuntime(281):at android.os.Looper.loop(Looper.java:123) 04-23 12:55 :49.010:E/AndroidRuntime(281):at android.app.ActivityThread.main(ActivityThread.java:4627) 04-23 12:55:49.010:E/AndroidRuntime(281):at java.lang.reflect.Method .invokeNative(Native Method) 04-23 12:55:49.010:E/AndroidRuntime(281):at java.lang.reflect.Method.invoke(Method.java:521) 04-23 12:55:49.010: E/AndroidRuntime(281):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 04-23 12:55:49.010:E/AndroidRuntime(281):at com.android。 INT ernal.os.ZygoteInit.main(ZygoteInit.java:626) 04-23 12:55:49.010:E/AndroidRuntime(281):at dalvik.system.NativeStart.main(Native Method) 04-23 12:55 :49.010:E/AndroidRuntime(281):导致:java.lang.NullPointerException 04-23 12:55:49.010:E/AndroidRuntime(281):at org.assignment.timetable.Timetable $ MyComparator.compare(Timetable。 java:51) 04-23 12:55:49.010:E/AndroidRuntime(281):at org.assignment.timetable.Timetable $ MyComparator.compare(Timetable.java:1) 04-23 12:55:49.010: E/AndroidRuntime(281):在java.util.TimSort.countRunAndMakeAscending(TimSort.java:320) 04-23 12:55:49.010:E/AndroidRuntime(281):在java.util.TimSort.sort(TimSort。 java:185) 04-23 12:55:49.010:E/AndroidRuntime(281):at java.util.TimSort.sort(TimSort.java:169) 04-23 12:55:49.010:E/AndroidRuntime(281):在java.util.Arrays.sort(Arrays.java:1907) 04-23 12:55:49.010:E/AndroidRuntime(281):at java .util.Collections.sort(Collections.java:1972) 04-23 12:55:49.010:E/AndroidRuntime(281):at org.assignment.timetable.Timetable.sortModules(Timetable.java:71) 04- 23 12:55:49.010:E/AndroidRuntime(281):at org.assignment.timetable.Timetable.onCreate(Timetable.java:40) 04-23 12:55:49.010:E/AndroidRuntime(281):at android .app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 04-23 12:55:49.010:E/AndroidRuntime(281):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 04-23 12 :55:49.010:E/AndroidRuntime(281):... 11更多

+4

在你的数组上使用Arrays.sort(),并创建你自己的比较器。 – Jave 2012-04-23 11:21:02

+0

是他们的任何教程? – mitchnufc 2012-04-23 11:28:18

+0

Google是你的朋友,下面是创建一个比较器的一个例子: http://www.vogella.com/blog/2009/08/04/collections-sort-java/ 我也会举一个快速例子。 – Jave 2012-04-23 11:31:10

回答

1
public WeekComparator implements Comparator { 
private String[] weeksdays = {"monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"}; 
public int compare(Object o1, Object o2) { 
    if(!(o1 instanceof String && o2 instanceof String)) { 
    throw new ClassCastException(); 
    } 
    int day1 = indexOfDay((String)o1); 
    int day2 = indexOfDay((String)o2); 
    if(day1==day2) return 0; 
    return (day1>day2 ? 1 : -1); 
} 

private int indexOfDay(String s) { 
    for(int i = 0 ; i < weekdays.length;i++) { 
    if(weekdays[i].equalsIgnoreCase(s)) return i; 
    return 10; 
} 

}

我没有测试过这个,但应该工作..在纸上(呃...屏幕)

2

下面是一个例子:

//Assuming that the Module-class has the day stored as a String named "day" 
static class MyComparator implements Comparator<Module>{ 
    private final static HashMap<String, Integer> order = getMap(); 

    @Override 
    public int compare(Module lhs, Module rhs){ 
     int leftOrder = order.get(lhs.day.toLowerCase()); 
     int rightOrder = order.get(rhs.day.toLowerCase()); 
     return leftOrder - rightOrder; 
    } 

    private final static HashMap<String, Integer> getMap(){ 
     HashMap<String, Integer> res = new HashMap<String, Integer>(); 
     res.put("monday",0); 
     res.put("tuesday",1); 
     res.put("wednesday",2); 
     res.put("thursday",3); 
     res.put("friday",4); 

     return res; 
    } 
} 

当你创建数组(任何你想要的),你可以像这样对它进行排序:

Arrays.sort(myArray, new MyComparator()); 

或者,如果你有一个列表:

Collections.sort(myList, new MyComparator()); 

现在将排序数组中的项目。

+0

这是做为一个内部类吗? – mitchnufc 2012-04-23 11:41:46

+0

我使它像内在的类,但技术上它可以在任何地方定义。 – Jave 2012-04-23 11:42:18

+0

得到这个错误,我不得不删除MyComparator中的覆盖:类型数组中的方法排序(T [],比较器)不适用于参数(ArrayList ,Timetable.MyComparator) – mitchnufc 2012-04-23 11:48:32