Comparator は「並べ替えのルール」を自由に定義できるので、実務では ファイル名順・日付順・サイズ順などのソートに多用されます。ここでは代表的な例をいくつか紹介します。
例1:ファイル名でソート
シナリオ
フォルダ内のファイルを名前順(アルファベット順)に並べたい。
コード例
import java.io.File;
import java.util.*;
public class FileNameSort {
public static void main(String[] args) {
File dir = new File("C:/example"); // 任意のフォルダ
File[] files = dir.listFiles();
Arrays.sort(files, Comparator.comparing(File::getName));
for (File f : files) {
System.out.println(f.getName());
}
}
}
Java- ポイント:
Comparator.comparing(File::getName)で「ファイル名」を基準にソート。 - 実務では「拡張子別に並べたい」「大文字小文字を無視したい」などの応用も可能。
例2:更新日でソート
シナリオ
ファイルを「更新日時の新しい順」に並べたい。
コード例
import java.io.File;
import java.util.*;
public class FileDateSort {
public static void main(String[] args) {
File dir = new File("C:/example");
File[] files = dir.listFiles();
Arrays.sort(files, Comparator.comparingLong(File::lastModified).reversed());
for (File f : files) {
System.out.println(f.getName() + " : " + new Date(f.lastModified()));
}
}
}
Java- ポイント:
File::lastModifiedで更新日時を取得。 .reversed()をつけると「新しい順」になる。
例3:ファイルサイズでソート
シナリオ
ファイルを「サイズの大きい順」に並べたい。
コード例
import java.io.File;
import java.util.*;
public class FileSizeSort {
public static void main(String[] args) {
File dir = new File("C:/example");
File[] files = dir.listFiles();
Arrays.sort(files, Comparator.comparingLong(File::length).reversed());
for (File f : files) {
System.out.println(f.getName() + " : " + f.length() + " bytes");
}
}
}
Java- ポイント:
File::lengthでファイルサイズを取得。 - 大きい順に並べることで「容量の大きいファイルを探す」などに役立つ。
例4:複合条件ソート(実務でよく使う)
シナリオ
「更新日が新しい順」→「同じ日ならファイル名順」で並べたい。
コード例
import java.io.File;
import java.util.*;
public class FileMultiSort {
public static void main(String[] args) {
File dir = new File("C:/example");
File[] files = dir.listFiles();
Arrays.sort(files, Comparator
.comparingLong(File::lastModified).reversed()
.thenComparing(File::getName));
for (File f : files) {
System.out.println(f.getName() + " : " + new Date(f.lastModified()));
}
}
}
Java- ポイント:
thenComparingを使うと「複数条件」でソートできる。 - 実務では「日付→名前」「部署→社員番号」など複合条件がよく登場する。
まとめ
- Comparator は「並べ替えルール」を自由に作れる。
- 実務ではよく使うのは:
- ファイル名順
- 更新日順
- サイズ順
- 複合条件(更新日+名前など)
Comparator.comparingとthenComparingを組み合わせると柔軟なソートが可能。
