AMG Solution

【Java Stream API 超入門】sortedメソッドを使ってオブジェクトをソートする方法

Java Stream API
feels

こんにちは。大城です。
 
本ブログでは、Java SE 8で追加されたStream APIについて、初心者向けに解説していきます。前回のブログでは、2重Listを1重に直すflatMapと重複を削除するdistinctについて説明しました。
 
中間処理3回目の今回は、ソートを行うsortedについて解説していきます。

環境

OS
Windows10
Java
Java8

Comparableを実装しているオブジェクトをソートするsorted()

IntegerやStringのような、java.lang.Comparableを実装しているクラスは簡単にソートすることができます。例をご覧ください。

実行結果

Integerはその大きさで、Stringは辞書式順序でそれぞれソートされていることがわかります。このように、Comparableを実装しているクラスは、Streamを取得してsorted()メソッドを実行するだけでソートを実施することができます。

Comprableを実装していないオブジェクトのソート

続いて、自作クラスなどのようなComparableを実装していないクラスをソートするする方法について解説します。この場合は、オブジェクトからComparableな値を取り出して比較するComparatorを生成して、sortedに引数として渡します。例をご覧ください。

実行結果

Comparatorは、Comparator.comparing()にラムダ式を渡して生成します。この際、オブジェクトからComparableな値を返すようなラムダ式を渡します。上記の例ではCityクラスのString型のプロパティであるnameを返すラムダ式e -> e.getName()を渡しています。
 
これによって、Streamはnameプロパティによって辞書式にソートされる結果となっているのです。上記の他に、City.getName().length()や、City.getPopulation()もComparableな値を返すので、これらによるソートの例を下記に記します。

実行結果

逆順ソート

上記では昇順ソートについて説明しましたが、最後に降順ソートのやり方も紹介します。

Comparableなオブジェクトの場合

ComparableなオブジェクトはsortedにComparator.reverseOrder()を渡すことで降順ソートすることができます。例をご覧ください。

実行結果

降順にソートできていることがわかります。

Comparableを実装しないオブジェクトの場合

Comparableが実装されていないオブジェクトは、Comparatorに.reversed()を指定します。例をご覧ください。

実行結果

それぞれ降順ソートができていることがわかります。注意点として、comparingに渡すラムダ式では((City)e).getName()のようにキャストを行うなどして明示的に型を指定しなければなりません。
 
詳細は割愛しますが、型を推論できる根拠がないとコンパイルエラーが発生します。

まとめ

いかがでしたか。
 
Streamのソートを行いたいときはsorted()を実行するだけで良く、非常にわかりやすいかと思います。次回では、Streamを用いた処理の略記やラムダ式・メソッド参照について解説していこうと思います。
 
それでは、また。
 
 
 
 
《関連記事》

feels recruit

OSHIRO'S BLOG

大城の記事

大城の記事の最新情報をお届けいたします。

SAME CATEGORY BLOG

この記事と同様のカテゴリー記事

feelsでSFA・CRM
はじめました。
LOADING