2016-05-29 9 views
-2

私はこのクラスを持っている:Javaでグループ化してリストを並べ替えるにはどうすればいいですか?

class Employee { 
    String name; 
    int type; // 0 = ADMIN, 1 = NON-ADMIN 
} 

は今、私は従業員

List<Employee> liste; 

のリストを持って、私はすべてのADMIN従業員がソートされているような方法でリストをソートし、すべてのNON-ADMINの前に現れることができます結果のソートされた従業員?

+0

コンパレータ –

+0

を使用して、私はあなたが 'type'が代わりのマジックナンバーのために列挙型を使用することをお勧め。 – khelwood

+0

コンパレータの実装を提供できますか?私はこれを試した: java.util.Collections.sort(リスト、(a、b) - > a.name.compareTo(b.name)+(a.type-b.type) ); –

答えて

0

コンパレータを使用して、最初にタイプ別にソートしてから、名前で並べ替えます。

java.util.Collections.sort(list, (a,b)-> 
    a.type != b.type ? a.type - b.type : a.name.compareTo(b.name);) 

実際にはあなたが望むものであると仮定して動作するはずです。 String

となります。

これは辞書順の定義です。 2つの文字列がそれぞれ である場合、両方の文字列の有効なインデックスである のインデックスが異なるか、またはその長さが 異なっているか、またはその両方です。 1つまたは複数のインデックス位置に異なる文字がある場合は、kをそのようなインデックスの最小値にします。文字列 は、 オペレータを使用して決定されるように、位置kの文字がより小さい値を有し、他の文字列を辞書的に先行する。 この場合、のcompareToは 値が2つの文字列内の位置kで2つの文字の違いを返す - つまり、値:

this.charAt(k)-anotherString.charAt(k)

彼らが異なるのNO指標 位置が存在しない場合短い文字列 は、長い文字列に辞書的に先行します。この場合、のcompareTo は、文字列の長さの差を返す - つまり、 値:ドキュメントから

this.length()-anotherString.length()

いません。正確に1,0、-1を返すcompareToに頼らないでください。代わりに+、0、 - を覚えておいてください。たとえば、長さの差が1で、型の違いが-1の場合、コンパレータは間違っています。

0

あなたは複合コンパレータ作ることができます。このよう

list.sort(Comparator.comparingInt(Employee::getType).thenComparing(Employee::getName)); 
+0

私はこの機能的な実装が好きです –

0

を、非管理者が最初に表示されます。

List<Employee> temp = new ArrayList<Employee>(); 
while(it.hasNext()){ 
     Employee employee = it.next(); 
     if (employee.getType() == 0){ 
      it.remove(); 
      temp.add(employee); 
     } 
} 
staff.addAll(temp); 
関連する問題