競技プログラミングで良く使う List のソートについて書く。
例えば、以下のクラスのインスタンスを保持する List があって、それを age が若い順(昇順)にソートしたいとする。
class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } }
そんな時は、Java8から導入されたラムダ式を使うと、
persons.sort((a, b) -> a.age - b.age);
といった感じで簡単に書ける。降順にソートしたい時は、
persons.sort((a, b) -> b.age - a.age);
とすれば良い。
以下は実装例。
// ソート対象の準備 List<Person> persons = new ArrayList<>(); persons.add(new Person("Taro", 20)); persons.add(new Person("Saburo", 16)); persons.add(new Person("Jiro", 18)); // ラムダ式を使って age の昇順でソートする。 persons.sort((a, b) -> a.age - b.age); //Saburo: 16, Jiro: 18, Taro: 20 の順に出力される。 persons.forEach(person -> System.out.println(person.name + ": " +person.age));