订单按属性String设置<object>

时间:2017-04-06 14:25:23

标签: java set

我希望按其字符串属性Set<TailleDetail>)排序mesure,但我在互联网上看到的唯一解决方案(TreeSetComparator)工作,你能帮助我吗?

我的课程:

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

2 个答案:

答案 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)

另见When should a class be Comparable and/or Comparator?