Java8のComparatorの使い方(Collectionsクラスのsortメソッド)

Java8のComparatorの使い方(Collectionsクラスのsortメソッド)

Java8からComparatorの使い方が大変簡単になりました。

Integer型のlistが適当に並んでいるとします。

これを昇順にソートするには以下のようにnaturalOrderメソッドを使います。

以下、例です。

結果は以下のように昇順にソートされます。

逆に降順にソートしたい場合はreverseOrderメソッドを使います。

結果は以下のように降順にソートされます。

reverseメソッド

Collections.reverseメソッドはリストを単純に逆順(addした順の逆)に並び替えます。

結果は以下のようにaddした順の逆順に並び替えられます。

Streamのsortedを使う

Streamのsortedを使ってソートすることも可能です。

Comparator.naturalOrder()を指定しているので、結果は以下のように昇順にソートされます。降順にソートしたい場合はComparator.reverseOrder()を指定します。

Listの要素が独自クラスのインスタンス(オブジェクト)の場合

ListがintだったりStringだったりする場合は理解できるけど、独自クラスだった場合のソート方法がわからなかったりします。

従業員を表すEmployeeクラスです。

Employeeクラスのオブジェクトのリストのソートをします。以下はList.sortメソッド(since 1.8)を使用して名前の昇順でソートする例です。

その他にもソート方法があります。例えばComparatorのcompareメソッドをオーバーライドするなどです。

Comparator.comparingメソッド

これもComparator.comparingメソッドを使用すればもうちょっときれいに書けます。

Collections.sortメソッドの第一引数にリスト、第二引数にComparator.comparingメソッドを指定することでソートすることができます。

ソートするキーにnullが含まれる場合

今までの書き方でも問題ないと思いますが、ソートキーにnullが含まれる可能性がある場合はヌルポで落ちる可能性があります。

この場合は、nullを考慮してあげます。

null メソッド
先頭行 Comparator.nullsFirstメソッド
最終行 Comparator.nullsLastメソッド

以下はnullの場合、先頭にもってきて名前順にソートする例です。

Java8のComparatorインタフェースで複合ソートする

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA