2016-07-27 71 views
1

我想根据三个条件对用户列表进行排序。 所以我必须创建自定义比较排序列表,但它不工作,因为我想使用自定义比较器不工作的排序列表

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但是你可以用任何一种比较去做。

相关问题