2016-07-27 1 views
1

3つの基準に基づいてユーザーのリストを並べ替える必要があります。 だから私は、作成したカスタムコンパレータは、リストをソートするが、私はカスタムコンパイラを使用してリストを並べ替えることはできません

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; 
    } 
} 

ますが、正しく

私は、整数、ブールの三つの方法アレイと日付 などでリストをソートしたい

働いていないのを望むように動作していないその私のコードで見ることができます。

+2

'正しく動作していません。正しく動作していません。 [MCVE](http://stackoverflow.com/help/mcve)を含めてください – SomeJavaGuy

+0

「thenComparing」を使用 –

+2

「働いていない」とはどういう意味ですか?私はもっ​​と精巧にできますか? –

答えて

0

あなたはこのような何かを行うことができます:ここに

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) 
    ); 
} 
} 

は私だけcomparingIntを使用していますが、比較器のいずれかの種類でそれを行うことができます。

関連する問題