2017-02-08 4 views
-1

私はTreeSetを使って自然な順序で文字列と数値をソートできることを知っています。オブジェクトのセットがある場合はどうなりますか?例えばSetをJavaで並べ替えるには?

I have a Person class 
{ 
    private String firstName; 
    private String lastName; 
    private int age; 

} 

セット人=新しいTreeSetの();

私がほしい私が初期化するときにfirstNameでソート。それはあなたがPersonクラスを変更する必要がないので、

+3

「Comparable」とOracleの[object ordering tutorial](https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html)を参照してください。 –

+0

私はこの投稿があなたを助けることができると思うhttp://stackoverflow.com/questions/4132367/sorting-objects-within-a-set-by-a-string-value-that-all-objects-contain –

+0

私を見てください同様の質問については、[ここ](http://stackoverflow.com/a/42123307/3845396)に答えてください。 – HPatel

答えて

1

あなたのための両方ComparableComparator仕事が、私はComparatorを示唆して、あなただけのため、Comparatorがはるかにflexiableで、ソート属性に基づいて実装クラスを記述する必要があります。

import java.util.Comparator; 
public class FirstNameComparator implements Comparator<Person> { 

    @Override 
    public int compare(Person o1, Person o2) { 
     String name1 = o1.getFirstName(); 
     String name2 = o2.getFirstName(); 
     return name1.compareTo(name2); 
    } 

} 

//instantiate TreeSet instance with FirstNameComparator 
Set<Person> ts = new TreeSet<>(new FirstNameComparator()); 
+0

'Collections.sort'は' List'を取ります。そのため 'Set'では動作しません。しかし、OPは 'TreeSet'を使用しているので、[コンストラクタ](https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet(java.util.Comparator) )ここで動作する 'Comparator'を受け入れます。 –

+0

* 'Comparator'は、' Person'クラス*を変更する必要がないので、私はお勧めします。自然順序付けが必要なクラスの変更には何も問題ありません。もっと強力な議論は、 'Person'のようなクラスはたぶん*単一の自然順序を持たないということです。 – shmosel

+0

@MickMnemonicありがとうミック。私のせいで、私はiterableを取ったと思った。 – haifzhan

関連する問題