我希望按其字符串属性Set<TailleDetail>
)排序mesure
,但我在互联网上看到的唯一解决方案(TreeSet
和Comparator
)工作,你能帮助我吗?
我的课程:
public class TailleDetail {
private Integer id;
private String sexe;
private String mesure;
private Taille Taille;
}
编辑 -
对于TreeSet,我试试这个:
Set<TailleDetail> tailles = new TreeSet<TailleDetail>();
重新讨论:
Set<TailleDetail> tailles = new HashSet<TailleDetail>();
对于比较者我试试这个:
Set<TailleDetail> tailles = new HashSet<TailleDetail>();
Comparator<TailleDetail> comparatorTaille = new Comparator<TailleDetail>() {
@Override
public int compare(TailleDetail left, TailleDetail right) {
return left.toString().compareToIgnoreCase(right.toString());
}
};
List<TailleDetail> tai = tailleDetailViewManager.search(param, true);
Collections.sort(tai, comparatorTaille);
tailles = new HashSet<TailleDetail>(tai);
答案 0 :(得分:2)
以下代码可以解决问题:
final Set tailleDetails = new TreeSet(new TailleDetailComparator());
tailleDetails.add(...);
public class TailleDetailComparator implements Comparator {
@Override
public int compare(final TailleDetail o1, final TailleDetail o2) {
return o1.mesure.compareTo(o2.mesure);
}
}
请注意,将使用字符串比较规则(按字母顺序)进行比较。
答案 1 :(得分:1)
你的比较器不是通过mesure比较,而是通过它的toString()方法。 您应该调整比较器以按mesure进行排序。
您的列表已经排序,为什么要使用一套?
List<TailleDetail> tai = tailleDetailViewManager.search(param, true);
Collections.sort(tai, (td1, td2) -> td1.getMesure().compareTo(td2.getMesure())); // tai will be sorted by mesure
如果您确实想使用Set,请使用TreeSet:
SortedSet<TailleDetail> set = new TreeSet<>((td1, td2) -> td1.getMesure().compareTo(td2.getMesure())); // also sorted by mesure
set.addAll(list)