12億円ほしい人のブログ

メガBIG当たらないかな

Collections.sort() について

Javaラムダ式を勉強中です。

その中で、
Collections.sort(List, Comparator)
について調べたことをメモします。

・Comparator??
値の比較を実装できる、関数型インターフェースの1つです。CollectionsやArraysのsort()に渡すことで、リストなどのソートを実行できます。
ちなみに、? super T という書き方は、「下限境界ワイルドカード」というもので、T、もしくはその先祖クラスを意味しているそうです。
Java - Comparatorの<? super T>の意味|teratail

関数型インターフェースって、メソッドは抽象メソッドを1つだけもつもの、と学んだ気がしたのですが、Comparatorは普通の(?)メソッドをいろいろ持っていました。
「抽象メソッドは1つだけ」ということかもしれません。
Comparatorの抽象メソッドは
int compare (T o1, T o2)
という形式です。
Comparator (Java Platform SE 8)

・コーディング例

int[] numbers = {1, 3, -6, 0, -99};
List<Integer> numList = new ArrayList<>();
for(int num : numbers) {
    numList.add(num);
}

Collections.sort(numList, (a, b) -> { return a - b; });

for(Integer num : numList) {
    System.out.print(num + " -> ");
}
// 

sortメソッドの第2引数ではラムダ式を渡しています。
以下のようなインスタンスを作成しているイメージですね。
比較式自体をsortメソッドに渡すことで処理が簡潔に表現されたと思います。

Comparator<Integer> comp = (a, b) -> {return a - b; };

なおラムダ式の学習にあたってはQiitaの以下の記事がとても参考になりました。
qiita.com


年末年始はアウトレイジを見る予定です。
https://xn--outrage-movie-224l4a5a12azjmy.jp/