2016-07-27 10 views
1

Ich möchte Liste der Benutzer auf der Grundlage von drei Kriterien sortieren. So habe ich erstellt individuelle Vergleichsliste zu sortieren, aber seine nicht funktioniert, wie ichSortierliste mit benutzerdefinierten Vergleicher funktioniert nicht

public class CustomComparator implements Comparator { 
    List<Integer> user1Time = new ArrayList<>(); 
    List<Integer> user2Time = new ArrayList<>(); 
    int user1Count, user2Count; 
    ParseUser user1, user2; 
    Date user1Date, user2Date; 
    boolean user1Short, user2Short; 
    private String TAG="CustomComparator"; 

    @Override 
    public int compare(Object lhs, Object rhs) { 
     user1 = (ParseUser) lhs; 
     user2 = (ParseUser) rhs; 


     user1Time = user1.getList("timeAvailable"); 
     user2Time = user2.getList("timeAvailable"); 


     //To compare Available time of both users with Searched Time 

     if(user1Time!=null){ 
      user1Time.retainAll(Utils.availableTime); 
      user1Count = user1Time.size(); 
     }else{ 
      user1Count=0; 
     } 

     if(user2Time!=null){ 
      user2Time.retainAll(Utils.availableTime); 
      user2Count = user2Time.size(); 
     }else{ 
      user2Count=0; 
     } 



     Log.d(TAG, "compare: "+user1.getString("name")+" "+user1Count); 
     Log.d(TAG, "compare: "+user2.getString("name")+" "+user2Count); 



     //To compare lastSeen of both the users 
     user1Date = user1.getDate("lastSeen"); 
     user2Date = user2.getDate("lastSeen"); 


     //To compare shortNotice avilablity of both the user 
     user1Short = user1.getBoolean("shortNotice"); 
     user2Short = user2.getBoolean("shortNotice"); 

     if(user2Time!= null && user2Time!= null && user1Date!= null && user2Date!= null){ 
      if (user1Count>user2Count){ 
       if(user1Short){ 
        if(user1Date.compareTo(user2Date)>0){ 
         return -1; 
        }else { 
         return -1; 
        } 
       }else if (user1Date.compareTo(user2Date)>0){ 
        return -1; 
       }else if (user2Date.compareTo(user1Date)>0){ 
        return 1; 
       } 
      }else if(user2Short){ 
       if(user2Date.compareTo(user1Date)>0){ 
        return 1; 
       }else { 
        return -1; 
       } 
      }else if (user2Date.compareTo(user1Date)>0){ 
       return 1; 
      }else if (user1Date.compareTo(user2Date)>0){ 
       return -1; 
      } 
     } 
      return 0; 
    } 
} 

will, aber seine Arbeit nicht richtig

i Liste auf drei Arten Array von ganzen Zahlen sortiert werden soll, boolean und Datum als Sie können in meinem Code sehen.

+2

"aber es funktioniert nicht richtig" define nicht "richtig funktioniert". Bitte fügen Sie ein [MCVE] (http://stackoverflow.com/help/mcve) – SomeJavaGuy

+0

Verwenden Sie 'dannComparting' –

+2

Was meinst du mit" nicht funktioniert "? Könntest du mich ausführlicher machen? –

Antwort

0

Man könnte so etwas tun:

class Data { 
int A; 
int B; 
int C; 

public int getA() { 
    return A; 
} 

public void setA(int a) { 
    A = a; 
} 

public int getB() { 
    return B; 
} 

public void setB(int b) { 
    B = b; 
} 

public int getC() { 
    return C; 
} 

public void setC(int c) { 
    C = c; 
} 
} 

class Sorter { 
public void sort(List<Data> dataList){ 
    Collections.sort(dataList, 
      Comparator.comparingInt(Data::getA) 
      .thenComparingInt(Data::getB) 
      .thenComparingInt(data->data.C) 
    ); 
} 
} 

hier verwende ich nur comparingInt aber Sie es mit jeder Art von Komparatoren tun könnte.

Verwandte Themen