【Java】listの要素を並び替える ソート処理の方法について解説
  • facebookページ
  • twitterページ
  • 2021.01.01

    【Java】listの要素を並び替える ソート処理の方法について解説

    listに格納したデータを一定の並び順に変更したい場合、ソート処理を利用することで簡単に実現が可能です。

    本記事では、Javaプログラム開発に欠かせないlistのソート処理の方法について、サンプルコードを交えながらご紹介していきます。

    Javaのlistを昇順・降順でソートする


    Javaのlistインターフェースを実装したコレクションクラス(ArrayListなど)では、「sort」メソッドを利用することで要素の並び替えを行うことが可能です。

    Java7以前の主な記述法

    早速サンプルでsortメソッドの動きを確認していきましょう。

    Java7以前では、Collectionsクラスのsortメソッドにリストを指定することでソート処理を実施する方法が一般的でした。

    実行した結果が下記の通りです。

    昇順にソートを行う場合、引数にリストを指定するだけでよく、降順にソートを行いたい場合には第2引数にCollectionsクラスのreverseOrderメソッドを指定することで実現可能です。

    ポテパンダの一言メモ

    似た処理にCollectionsクラスのreverseメソッドを利用する方法がありますが、reverseメソッドは要素を逆順にする処理であり、降順に並び替える処理ではありません。
    降順に並び替えたい場合には、今回のようにsortメソッドの第2引数でreverseOrderを指定する方法で実行しましょう。

    Java8以降の主な記述法

    Java8以降では、listのソートにはComparatorを利用する方法主流となります。

    特にStreamを使用して、元のコレクションと別のコレクションを作成出来る機能は大きなメリットです。

    上記のJava7以前のサンプルをComparatorを利用して記述し直してみましょう。

    実行した結果が下記の通りです。

    「stream().sorted」を利用することにより、ソート処理前のリストと異なるコレクションクラスにソート結果を返却出来るようになりました。

    昇順でソートを実施したい場合には「naturalOrder()」、降順でソートを実施したい場合には「reverseOrder()」を指定することで簡単に実現可能です。

    Javaのlistを任意の形式でソートする


    Javaのlistを「ユーザー定義のクラスに設定された値によって並び替えたい」「複数の条件を組み合わせて並び替えたい」など、単純な昇順・降順以外のルールを設定してソート処理を実施したいケースも存在します。

    Java8では、Comparatorインターフェースを利用することで、任意の形式でソート処理を実施することが可能です。

    複数条件を組み合わせたユーザー定義クラスのソート処理

    複数条件でユーザー定義クラスのフィールド値によってソート順を切り替える処理のサンプルをご紹介していきます。

    ユーザー定義クラスをキーとしてソート処理を実施したい場合には、「comparing()」を利用します。

    複数条件を組み合わせる場合には、「thenComparing()」を利用することで、ソート条件を指定することが可能です。

    実行した結果が下記の通りです。

    サンプルでは、Animalクラスのtypeフィールドの値を昇順に並び替えた後、nameフィールドの値を2つ目の条件として昇順で並び替えるよう指定しています。

    18行目で、ソート順を定義するComparatorを作成し、21行目からの実際のソート処理に条件として指定しています。

    さいごに: Java8以降のlistソート処理にはComparatorを利用しよう


    本記事では、Javaでのlist要素を並び替えるソート処理について、Java7以前とJava8以降の主流の方法をご紹介してきました。

    Java8以降でも引き続きCollectionsクラスを利用したソート処理も実装可能ではありますが、Comparatorを利用することで可読性向上や機能性向上などが期待出来ます。

    今後Java8以降でシステム開発を行う際には、基本的にはComparatorを利用してソート処理を実装することをおすすめします。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE