2013-10-11 1 views
1

Привет У меня есть класс страны и содержит набор countryLanguage. Я хочу сортировать язык для каждой страны. Я создаю страницу просмотра. стране и его соответствующем языке. county в порядке, но его язык не отсортирован. Я смущен, в каком классе я использую compartor и как.сортировать объект, используя сопоставимые для архариста объектов

public class Country implements Serializable{ 
private Set<CountryLanguage> countryLanguage = new HashSet<CountryLanguage>(0); 
//... 
} 
public class CountryLanguage { 
private CountryLanguageID countryLangPK = new CountryLanguageID(); 
//... 
} 

класс Композит ID

public class CountryLanguageID implements Serializable,Comparable<CountryLanguageID>{ 

private Country country; 
private Language language; 

@ManyToOne(fetch=FetchType.LAZY) 
public Country getCountry() { 
    return country; 
} 
public void setCountry(Country country) { 
    this.country = country; 
} 

@ManyToOne(fetch=FetchType.LAZY) 
public Language getLanguage() { 
    return language; 
} 
public void setLanguage(Language language) { 
    this.language = language; 
} 

public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 

    CountryLanguageID that = (CountryLanguageID) o; 

    if (country != null ? !country.equals(that.country) : that.country != null){ 
     return false; 
    } 
    if (language != null ? !language.equals(that.language) : that.language != null){ 
     return false; 
    } 
    return true; 
} 
public int hashCode() { 
    int result; 
    result = (country != null ? country.hashCode() : 0); 
    result = 31 * result + (language != null ? language.hashCode() : 0); 
    return result; 
} 
@Override 
public int compareTo(CountryLanguageID o) { 

    //return this.language.compareTo(o.language); 
    return this.getLanguage().getLanguageName().compareTo(o.getLanguage().getLanguageName()); 
} 
} 

ответ

2

Вы можете использовать TreeSet вместо HashSet держать countryLanguage:

private Set<CountryLanguage> countryLanguage = new TreeSet<CountryLanguage>(0); 

Элементы TreeSet упорядочены с использованием их естественного упорядочения или можно заказать используя Comparator, как правило, при условии, что время создания TreeSet.

Если вы хотите, чтобы пойти с natural ordering из CountryLanguage, сделать CountryLanguage реализовать Comparable:

public class CountryLanguage implements Comparable<CountryLanguage>{ 

@Override 
public int compareTo(CountryLanguage cl) { 
    // Comparison logic 
} 
... 
} 

И если вы хотите использовать Comparator заказать элементы из countryLanguage, определить компаратор:

private static final Comparator<CountryLanguage> COMP = new Comparator<CountryLanguage>() { 

     @Override 
     public int compare(CountryLanguage o1, CountryLanguage o2) { 
      // Compare o1 with o2 
     } 
}; 

и использовать его при создании TreeSet:

private Set<CountryLanguage> countryLanguage = new TreeSet<CountryLanguage>(COMP); 

EDIT:

Ваш set имеет тип CountryLanguage. Поэтому для того, чтобы отсортировать элементы Set<CountryLanguage> countryLanguage, вам нужно сделать CountryLanguage реализовать Comparable (но вы определили CountryLanguageID для реализации Comparable):

И при сравнении экземпляров CountryLanguage, вы можете использовать CountryLanguageID свойство для сравнения:

public class CountryLanguage implements Comparable<CountryLanguage>{ 
private CountryLanguageID countryLangPK = new CountryLanguageID(); 
...  
@Override 
public int compareTo(CountryLanguage cl) { 
return this.countryLangPK.getLanguage().getLanguageName().compareTo(cl.getCountryLangPK().getLanguage().getLanguageName()); 
} 
... 
} 
+0

не работает. Я пробовал обе логики. В первой логике я написал сравнение login в countryLanguage как this.getCountryLangPK(). GetLanguage(). GetLanguageName(). CompareTo (o2.getCountryLangPK(). GetLanguage(). GetLanguageName()); больше предложений присваивается – Surya

+0

Вы можете изменить свой вопрос, чтобы включить новый код. –

+0

отредактированный код .... Я получаю проблему из-за ключа composit – Surya

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