JavaのListをソートする方法をマスター!ラムダ式で簡単にソートする方法も
  • facebookページ
  • twitterページ
  • 2019.09.24

    JavaのListをソートする方法をマスター!ラムダ式で簡単にソートする方法も

    この記事では、Javaで複数の値をまとめて管理するListクラスで、ソートを行う方法を解説します。

    JavaのListとは?

    Listは複数の要素を入れるための入れ物

    JavaのListは大きさが決まっていない配列のようなものとイメージしてください。Listは複数の値をまとめて管理する時に使用します。

    複数の値を格納できるという意味では配列も同じですが、配列とListの違いは、Listに格納できるデータは参照型のみです。

    LIstの基本的な使い方は、以下の記事で解説していますので、こちらもご覧ください。

    【関連記事】
    【Java入門】ArrayListの使い方!配列との違いも解説

    要素は基本は追加した順に並ぶ

    Listは、add メソッドで要素を追加することができます。追加した要素はソートしない限り、追加した順番に並んでいます。

    次のコードは、Listに200 → 100の順に要素を追加し、コンソールにListの内容を出力しています。実行結果を見ても分かる通り、addメソッドで追加した順に、List内の要素が並んでいます。

    数値のListをソートする方法

    ここからはListの要素をソートする方法を解説していきます。最初は数値のListをソートする方法を見ていきましょう。

    Listをソートする時は、Collectionsクラスのsort メソッドを使用します。以下に昇順/降順でソートする方法を、それぞれ解説します。

    昇順でソートする

    まずは、昇順でソートする場合のサンプルコードです。次のコードでは、ArrayListにaddメソッドで順不同に数値を追加し、最後にCollectionsクラスのsort メソッドでソートを実行しています。

    降順でソートする

    続いて、降順でソートを行う方法を見ていきましょう。降順でソートするには、sortメソッドの第2引数にCollections.reverseOrder()メソッドを指定します。

    配列も同じような書き方でソートできる

    少し話は変わりますが、配列でもListと同じような書き方でソートが行えます。

    文字列のListをソートする方法

    先述した数値のListをソートする時と同じように、Collectionsクラスのsort メソッドを使って、文字列(String)を格納したListをソートできます。

    文字列は文字コード順にソートされる

    文字列のソートでは、要素は文字コード順で並び替えられます。コンピューターの世界では、文字1つ1つに対し数値のコードが割り当てられており、文字列のソートは、この数値のコード順で並びます。

    数字・アルファベット・ひらがな・カタカナなどについては、皆さんがイメージする通り(アルファベットであればA→Zの順)に文字コードが割り振られている為、ソート結果もイメージ通りになるでしょう。

    ただし、漢字については「読み」の順でソートされるイメージを持つ方が多いと思いますが、Javaのデフォルトで使用されるUnicodeでは、漢字は「部首画数順」に文字が収録されています。

    例えば、漢数字をソートすると以下のような結果になり、イメージ通りではないことが分かると思います。

    Memo

    Unicodeに収録されている漢字の一覧は、以下のサイトで確認することができます。興味のある方は一度ご覧になってみてください。

    CJK統合漢字-全漢字一覧 (http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/cjku_klist.html)

    クラスのListをソートする方法

    独自に作成したクラスや、複数の条件でソートする場合、Comparatorインターフェースを実装したクラスを作成し、そこに任意のソート条件を書いていきます。

    実際に独自に作成したクラスをソートするサンプルコードを見ていきましょう。次のコードは、商品名と金額を持つProductクラスと、Productクラスを金額の順にソートするための、ProductComparatorを実装した例です。

    【Productクラス】

    【ProductComparatorクラス】

    【ProductComparatorを使ってソートするコード】

    Java8以降のラムダ式でソートする方法

    Java8以降は、Stream APIとラムダ式でより短くソート処理を書くことが可能です。Comparatorインターフェイスでソート条件を書く場合、ソート条件の数だけクラスが増えていきますが、Java8以降で使えるラムダ式では、そんな必要がなくなりました。

    上で解説したProductクラスをソートする処理を、ラムダ式に書き直したものが、以下のサンプルコードです。

    ラムダ式で書くと、Comparatorインターフェースを実装したクラスを用意する必要がないため、だいぶスッキリしました。

    まとめ

    JavaのListをソートする方法について解説しました。ListはJavaの開発では必ずと言っていいほど、よく使います。また、Listのソートを活用すると、複雑だったコードが簡潔に書ける場合もあります。

    Listのソート方法をマスターして、Javaの知識を向上させましょう。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

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









    ABOUT US

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

    READ MORE

    ポテパンおすすめ案件