Enumを宣言順に並び変える(ジェネリクス版)
Enumのリストを宣言順に並び変えたいときには、自然順に並べるか、宣言順であることを明示したい場合はEnum.ordinal()
を使用します。
// Enumクラス public enum Element { FIRE, WATER, ELECTRRIC, POISON }
List<Element> elements = List.of(Element.ELECTRRIC, Element.POISON, Element.WATER, Element.FIRE, Element.WATER, Element.POISON); List<Element> sorted = elements.stream() .sorted() .toList(); // もしくは // List<Element> sorted = elements.stream() // .sorted(Comparator.comparing(Enum::ordinal)) // .toList(); System.out.println(sorted); // => [FIRE, WATER, WATER, ELECTRRIC, POISON, POISON]
メソッドに切り出し
並び変え部分をメソッドにします。
public static List<Element> sortByOrdinal(List<Element> list) { return list.stream() .sorted() .toList(); }
// 呼び出し側 List<Element> elements = List.of(Element.ELECTRRIC, Element.POISON, Element.WATER, Element.FIRE, Element.WATER, Element.POISON); List<Element> sorted = sortByOrdinal(elements); System.out.println(sorted); // => [FIRE, WATER, WATER, ELECTRRIC, POISON, POISON]
ジェネリクス化
ジェネリクス化します。Enumクラスの親クラスはE extends Enum<E>
で表すことができます。
public static <E extends Enum<E>> List<E> sortByOrdinal(List<E> enumList) { if (enumList == null) { return null; } return enumList.stream() .sorted() .toList(); // もしくは // return enumList.stream() // .sorted(Comparator.comparing(Enum::ordinal)) // .toList(); }
呼び出し側は特に変更なしです。
// 呼び出し側 List<Element> elements = List.of(Element.ELECTRRIC, Element.POISON, Element.WATER, Element.FIRE, Element.WATER, Element.POISON); List<Element> sorted = sortByOrdinal(elements); System.out.println(sorted); // => [FIRE, WATER, WATER, ELECTRRIC, POISON, POISON]
バージョン
Java 17