このJavaプログラムが何をしているのかを説明し、コードにコメントアウトで解説を追加します。
import java.util.ArrayList; // ArrayListクラスをインポート
import java.util.Arrays; // Arraysクラスをインポート
public class Main {
public static void main(String[] args) {
// ArrayListを作成し、アルファベットのリストで初期化
var alphabet = new ArrayList<>(
Arrays.asList(
new String[] {"A", "B", "C", "D", "E"}
)
);
// アルファベットを逆順にソート
alphabet.sort((var a, var b) -> -a.compareTo(b));
// ソートされたアルファベットをコンソールに出力
alphabet.forEach(System.out::println);
}
}
プログラムの説明
import java.util.ArrayList;
とimport java.util.Arrays;
は、ArrayList
クラスとArrays
クラスをインポートしています。これにより、プログラム内でこれらのクラスを使用することができます。public class Main {
は、Main
という名前のクラスを定義しています。public static void main(String[] args) {
は、Javaアプリケーションのエントリーポイントであるmain
メソッドを定義しています。var alphabet = new ArrayList<>(Arrays.asList(new String[] {"A", "B", "C", "D", "E"}));
は、新しいArrayList
を作成し、A
からE
までの文字列を含むリストで初期化しています。alphabet.sort((var a, var b) -> -a.compareTo(b));
は、リストの要素を逆順にソートしています。compareTo
メソッドを使用して文字列を比較し、-
をつけることで降順に並べ替えています。alphabet.forEach(System.out::println);
は、リストの各要素を標準出力に出力しています。
このプログラムは、A
からE
までのアルファベットを含むリストを作成し、それを逆順にソートしてから、ソートされたアルファベットをコンソールに出力します。
追記
ラムダ式を通常のコードに直したバージョンを以下に示します。
import java.util.ArrayList; // ArrayListクラスをインポート
import java.util.Arrays; // Arraysクラスをインポート
import java.util.Comparator; // Comparatorクラスをインポート
public class Main {
public static void main(String[] args) {
// ArrayListを作成し、アルファベットのリストで初期化
var alphabet = new ArrayList<>(
Arrays.asList(
new String[] {"A", "B", "C", "D", "E"}
)
);
// アルファベットを逆順にソート(通常のComparatorクラスを使用)
alphabet.sort(new Comparator<String>() {
@Override
public int compare(String a, String b) {
return -a.compareTo(b);
}
});
// ソートされたアルファベットをコンソールに出力
for (String letter : alphabet) {
System.out.println(letter);
}
}
}
プログラムの説明
import java.util.Comparator;
は、Comparator
クラスをインポートしています。これにより、カスタムの比較ロジックを持つ比較器を作成できます。ラムダ式だった
alphabet.sort((var a, var b) -> -a.compareTo(b));
を、匿名クラスを使用した通常のComparator
実装に置き換えました。ラムダ式だった
alphabet.forEach(System.out::println);
を、拡張forループを使用して置き換えました。
この変更により、ラムダ式を使用しないで同じ機能を実現しています。
補足
@Override
でオーバーライドしている元のメソッドは、Comparator
インターフェースに定義されています。Comparator
インターフェースは、java.util
パッケージに含まれており、以下のように定義されています。
Comparatorインターフェース
package java.util;
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
// 他のメソッド(デフォルトメソッドや静的メソッド)もありますが、省略しています
}
オーバーライドされているメソッド
上記のComparator
インターフェースの中で、オーバーライドされているメソッドはcompare
メソッドです。このメソッドは、2つの引数を受け取り、それらを比較して順序を決定します。
実際のコードでのオーバーライド
あなたのコードの中で、以下の部分がComparator<String>
インターフェースのcompare
メソッドをオーバーライドしています。
alphabet.sort(new Comparator<String>() {
@Override
public int compare(String a, String b) {
return -a.compareTo(b);
}
});
このコードでは、匿名クラスを使ってComparator<String>
を実装し、compare
メソッドをオーバーライドしています。このオーバーライドされたcompare
メソッドは、2つのString
オブジェクトa
とb
を比較し、その結果にマイナスをつけることで降順に並べ替えています。
まとめ
オーバーライド元のcompare
メソッドは、Comparator
インターフェースに定義されているものです。このメソッドをオーバーライドすることで、ArrayList
のソート方法をカスタマイズしています。
Top comments (0)