2017-04-06 25 views
0

我想排序Set<TailleDetail>其字符串属性(mesure)之一,但唯一的解决方案,我在互联网上(TreeSetComparator)看到不工作,你能帮帮我吗?序集<Object>通过属性字符串

我的类:

public class TailleDetail { 
    private Integer id; 
    private String sexe; 
    private String mesure; 
    private Taille Taille; 
} 

编辑 -

对于TreeSet的我只是试试这个:

Set<TailleDetail> tailles = new TreeSet<TailleDetail>(); 

到remplace:

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

添加您TreeSet的 – stinepike

+0

问题寻求调试帮助试图代码(“为什么”不是个这个代码是否工作?“)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建[mcve]。 –

+1

这是将所有东西都拧紧的行:'tailles = new HashSet (tai);' - HashSet没有可以依赖的排序,它肯定不会保留列表的顺序用于填充它。使用LinkedHashSet可以工作 - 但这仍然是一个坏主意。相反,将比较器的实例传递给构造器TreeSet构造函数。 –

回答

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

注意,比较要使用字符串比较规则(按字母顺序)来完成。

+0

它的工作! :D 谢谢! –

+0

然后,您可以将此答案标记为解决问题:D – Ruben

1

你的比较器不能通过比较来比较,而是通过它的toString()方法。 你应该调整你的比较器以便按照排序进行排序。

你列表已经排序,所以为什么要使用一组?

List<TailleDetail> tai = tailleDetailViewManager.search(param, true); 
Collections.sort(tai, (td1, td2) -> td1.getMesure().compareTo(td2.getMesure())); // tai will be sorted by mesure 

如果你想使用一组,使用一个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?

+0

因为我使用另一个People创建的代码,并且此函数需要Set而不是List,并且List未按正确顺序排序... –

相关问题