2013-10-08 5 views
1

Я работаю в приложении для Android. Я хочу отсортировать List из Objects с Object Property. Я отсортировали это успешно, но когда я разбирайтесь все список с этим объектом изменяет значение так же, как отсортированного значениеСортировка значений с помощью компаратора изменяет все значения с этим объектом

Пожалуйста, посмотрите в код ма:

SortedSet<Caseload> removeDuplicateClientName = new TreeSet<Caseload>(
      new Comparator<Caseload>() { 
       @Override 
       public int compare(Caseload caseload0, Caseload caseload1) { 
        return caseload0.ClientName.compareTo(caseload1.ClientName); 
       } 
      }); 

// Getting the list of values from web service 
    mLISTCaseloadsHeads = parsedXML.getCaseLoadValues("get_Caseload_ClientServiceGroupID", param); 
    List<Caseload> newBackUp=mLISTCaseloadsHeads ; 
        Iterator<Caseload> iterator = mCaseloadsHeads.iterator(); 
        while (iterator.hasNext()) { 
         removeDuplicateClientName.add(iterator.next()); 
        } 
        mCaseloadsHeads.clear(); 
        mCaseloadsHeads.addAll(removeDuplicateClientName); 

Список newBackUp также изменяет значение так же, как упорядоченный список

Загруженность класс:

public class Caseload implements Comparable<Caseload> { 

     public int BusClientLogID; 
     public int ClientID; 
     public int ClientStatus; 
     public int ClientServiceGroup_ClientSiteTherapyID; 
     public String ClientName; 
     public String TimeArrive; 
     public String TimeDepart; 
     public String SignOutTime; 
     public String SignInTime; 
     public String ServiceCompletedCount; 
     public Boolean ShowFooter = false; 

     public int getBusClientLogID() { 
      return BusClientLogID; 
     } 

     public void setBusClientLogID(int busClientLogID) { 
      BusClientLogID = busClientLogID; 
     } 

     public int getClientID() { 
      return ClientID; 
     } 

     public void setClientID(int clientID) { 
      ClientID = clientID; 
     } 

     public int getClientStatus() { 
      return ClientStatus; 
     } 

     public void setClientStatus(int clientStatus) { 
      ClientStatus = clientStatus; 
     } 

     public int getClientServiceGroup_ClientSiteTherapyID() { 
      return ClientServiceGroup_ClientSiteTherapyID; 
     } 

     public void setClientServiceGroup_ClientSiteTherapyID(
       int clientServiceGroup_ClientSiteTherapyID) { 
      ClientServiceGroup_ClientSiteTherapyID = clientServiceGroup_ClientSiteTherapyID; 
     } 

     public String getClientName() { 
      return ClientName; 
     } 

     public void setClientName(String clientName) { 
      ClientName = clientName; 
     } 

     public String getTimeArrive() { 
      return TimeArrive; 
     } 

     public void setTimeArrive(String timeArrive) { 
      TimeArrive = timeArrive; 
     } 

     public String getTimeDepart() { 
      return TimeDepart; 
     } 

     public void setTimeDepart(String timeDepart) { 
      TimeDepart = timeDepart; 
     } 

     public String getSignOutTime() { 
      return SignOutTime; 
     } 

     public void setSignOutTime(String signOutTime) { 
      SignOutTime = signOutTime; 
     } 

     public String getSignInTime() { 
      return SignInTime; 
     } 

     public void setSignInTime(String signInTime) { 
      SignInTime = signInTime; 
     } 

     public String getServiceCompletedCount() { 
      return ServiceCompletedCount; 
     } 

     public void setServiceCompletedCount(String serviceCompletedCount) { 
      ServiceCompletedCount = serviceCompletedCount; 
     } 

     @Override 
     public int compareTo(Caseload compareCaseload) { 

      int busClientLogID = ((Caseload) compareCaseload).getBusClientLogID(); 

      return busClientLogID - this.BusClientLogID; 
     } 

    } 

Пожалуйста, дайте мне решение.

+1

Какой упорядоченности вы хотите из списка, как я могу видеть возвращение заявление с сравнить это вопрос. – Prateek

+0

Хорошо ... Я хочу удалить дублирование в этом списке объектов с тем же именем, означает свойство с именем «Имя». – Arun

ответ

2

Сомневаюсь, что оператор возвращает, связанный с вашей функцией сравнения в компараторе.

Вы должны идти этим подходом, чтобы получить правильный порядок:

@Override 
    public int compare(YourClass lhs, YourClass rhs) { 

      YourClass p1 = (YourClass) lhs; 
      YourClass p2 = (YourClass) rhs; 

      int first = p1.ClientName; //use your getter if you want 
      int second = p2.ClientName; 

       if (second < first) { 
        return 1; 
       } 

       else if (second > first) { 
        return -1; 
       } 

       else { 
        return 0; 
       } 
     } 

Если вы идете этим подходом я думаю, вы получите требуемый порядок после сортировки.

Edit:

Теперь у меня есть вопрос, который вы используете ссылку исходного списка в newBackup и его не новый list, поэтому это происходит, используйте это, и вы хорошо идти ,

List<Caseload> newBackUp=new ArrayList<Caseload>(mLISTCaseloadsHeads);

+0

Из этого кода сортировка работает отлично, но newBackUp также меняет значения. Пожалуйста, загляните в мой вопрос. Я отредактировал его – Arun

+1

Что вы имеете в виду, изменяя значения, если вы говорите о данных, присутствующих внутри объекта или геттера, то это должно быть связано с возвратом инструкции busClientLogID - this.BusClientLogID; ', я не знаю, что ваш случай использования – Prateek

+0

Я получаю значения из веб-службы в список mLISTCaseloadsHeads. и я сохраняю backUp из списка, который я получаю из веб-службы, в новое имя списка newBackUp. И после сортировки списка mLISTCaseloadsHeads оригинальные значения в newBackUp также меняются на значения в mLISTCaseloadsHeads. Как я могу восстановить или сохранить резервную копию оригинального списка. Пожалуйста, помогите мне – Arun

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

  • Нет связанных вопросов^_^