[Java] Enumクラスのvaluesメソッドの使い方

Enumクラスvaluesメソッドは、列挙型に定義されたすべての定数を配列として返す静的メソッドです。

これにより、列挙型のすべての値を簡単に反復処理できます。

使い方としては、まず列挙型を定義し、その列挙型のvaluesメソッドを呼び出します。

例えば、Dayという列挙型がある場合、Day.values()を呼び出すことで、Dayに定義されたすべての曜日を配列として取得できます。

これをfor-eachループで使用することで、各定数に対して処理を行うことが可能です。

この記事でわかること
  • Enumクラスの基本的な使い方
  • valuesメソッドの具体的な利用法
  • Enumの値をリストやマップに変換する方法
  • その他のEnumメソッドの機能
  • Enumの特性と制約についての理解

目次から探す

valuesメソッドの基本

JavaのEnumクラスは、定数の集合を表現するための特別なクラスです。

Enumクラスには、定義されたすべての列挙定数を配列として取得するためのvaluesメソッドがあります。

このメソッドは、Enum型に対して自動的に生成され、列挙定数を簡単にループ処理したり、配列として扱ったりすることができます。

valuesメソッドを使用することで、Enumの各定数にアクセスしやすくなり、コードの可読性や保守性が向上します。

特に、定数の数が多い場合や、特定の処理を全ての定数に対して行いたい場合に非常に便利です。

valuesメソッドの使い方

配列としての取得

valuesメソッドを使用すると、Enum型のすべての定数を配列として取得できます。

これにより、定数の数や値を簡単に確認することができます。

以下は、Enumを定義し、valuesメソッドを使って定数を配列として取得するサンプルコードです。

// App.java
enum Color {
    RED, GREEN, BLUE
}
public class App {
    public static void main(String[] args) {
        // Enumのすべての定数を配列として取得
        Color[] colors = Color.values();
        
        // 配列の内容を表示
        for (Color color : colors) {
            System.out.println(color);
        }
    }
}
RED
GREEN
BLUE

このコードでは、ColorというEnumを定義し、valuesメソッドを使ってすべての色を配列として取得しています。

for-eachループでの利用

valuesメソッドを使うことで、for-eachループを利用してEnumの各定数に対して処理を行うことができます。

以下のサンプルコードでは、Enumの各定数を表示する方法を示しています。

// App.java
enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class App {
    public static void main(String[] args) {
        // Enumのすべての定数をfor-eachループで表示
        for (Day day : Day.values()) {
            System.out.println(day);
        }
    }
}
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

このコードでは、DayというEnumを定義し、for-eachループを使ってすべての曜日を表示しています。

配列の操作方法

valuesメソッドで取得した配列は、通常の配列と同様に操作することができます。

例えば、配列の長さを取得したり、特定のインデックスの値にアクセスしたりすることが可能です。

以下のサンプルコードでは、配列の長さを取得し、特定の定数にアクセスする方法を示しています。

// App.java
enum Fruit {
    APPLE, BANANA, ORANGE
}
public class App {
    public static void main(String[] args) {
        // Enumのすべての定数を配列として取得
        Fruit[] fruits = Fruit.values();
        
        // 配列の長さを表示
        System.out.println("フルーツの数: " + fruits.length);
        
        // 特定のインデックスの値を表示
        System.out.println("1番目のフルーツ: " + fruits[1]);
    }
}
フルーツの数: 3
1番目のフルーツ: BANANA

このコードでは、FruitというEnumを定義し、valuesメソッドを使ってフルーツの配列を取得しています。

配列の長さや特定のインデックスの値を表示することで、配列の操作方法を示しています。

valuesメソッドの応用例

Enumの値をリストに変換

valuesメソッドを使用して取得したEnumの値を、JavaのListに変換することができます。

これにより、リスト特有の操作(例えば、検索やフィルタリング)が可能になります。

以下のサンプルコードでは、Enumの値をリストに変換する方法を示しています。

// App.java
import java.util.Arrays;
import java.util.List;
enum Animal {
    DOG, CAT, BIRD
}
public class App {
    public static void main(String[] args) {
        // Enumの値をリストに変換
        List<Animal> animalList = Arrays.asList(Animal.values());
        
        // リストの内容を表示
        for (Animal animal : animalList) {
            System.out.println(animal);
        }
    }
}
DOG
CAT
BIRD

このコードでは、AnimalというEnumを定義し、valuesメソッドを使って取得した値をListに変換しています。

Enumの値をマップに変換

Enumの値をキーとして、関連する値を持つMapに変換することも可能です。

これにより、Enumの値に基づいて特定の情報を効率的に管理できます。

以下のサンプルコードでは、Enumの値をマップに変換する方法を示しています。

// App.java
import java.util.HashMap;
import java.util.Map;
enum Country {
    JAPAN("Tokyo"),
    USA("Washington D.C."),
    FRANCE("Paris");
    private final String capital;
    Country(String capital) {
        this.capital = capital;
    }
    public String getCapital() {
        return capital;
    }
}
public class App {
    public static void main(String[] args) {
        // Enumの値をマップに変換
        Map<Country, String> countryMap = new HashMap<>();
        for (Country country : Country.values()) {
            countryMap.put(country, country.getCapital());
        }
        // マップの内容を表示
        for (Map.Entry<Country, String> entry : countryMap.entrySet()) {
            System.out.println(entry.getKey() + "の首都: " + entry.getValue());
        }
    }
}
JAPANの首都: Tokyo
USAの首都: Washington D.C.
FRANCEの首都: Paris

このコードでは、CountryというEnumを定義し、各国の首都を関連付けたマップを作成しています。

Enumの値をソートする

Enumの値をソートすることも可能です。

Enumの定数は、定義された順序で自動的にソートされますが、特定の条件に基づいてソートすることもできます。

以下のサンプルコードでは、Enumの値をソートする方法を示しています。

// App.java
import java.util.Arrays;
import java.util.Comparator;
enum Size {
    SMALL, MEDIUM, LARGE
}
public class App {
    public static void main(String[] args) {
        // Enumの値を配列として取得
        Size[] sizes = Size.values();
        
        // サイズをソート
        Arrays.sort(sizes, Comparator.comparingInt(Size::ordinal));
        
        // ソートされたサイズを表示
        for (Size size : sizes) {
            System.out.println(size);
        }
    }
}
SMALL
MEDIUM
LARGE

このコードでは、SizeというEnumを定義し、ordinalメソッドを使ってサイズをソートしています。

これにより、Enumの値を特定の順序で表示することができます。

Enumクラスのその他のメソッド

valueOfメソッド

valueOfメソッドは、指定した文字列に対応するEnumの定数を取得するためのメソッドです。

このメソッドは、Enum型に対して自動的に生成され、引数として渡された文字列がEnumの定数名と一致する場合、その定数を返します。

以下のサンプルコードでは、valueOfメソッドの使い方を示しています。

// App.java
enum Season {
    SPRING, SUMMER, FALL, WINTER
}
public class App {
    public static void main(String[] args) {
        // 文字列からEnumの定数を取得
        Season season = Season.valueOf("SUMMER");
        
        // 取得したEnumの定数を表示
        System.out.println("選択された季節: " + season);
    }
}
選択された季節: SUMMER

このコードでは、SeasonというEnumを定義し、valueOfメソッドを使って文字列からEnumの定数を取得しています。

ordinalメソッド

ordinalメソッドは、Enumの定数が定義された順序に基づいて、その定数のインデックスを返します。

インデックスは0から始まり、定義された順序に従って増加します。

以下のサンプルコードでは、ordinalメソッドの使い方を示しています。

// App.java
enum Direction {
    NORTH, EAST, SOUTH, WEST
}
public class App {
    public static void main(String[] args) {
        // Enumの定数のインデックスを表示
        for (Direction direction : Direction.values()) {
            System.out.println(direction + "のインデックス: " + direction.ordinal());
        }
    }
}
NORTHのインデックス: 0
EASTのインデックス: 1
SOUTHのインデックス: 2
WESTのインデックス: 3

このコードでは、DirectionというEnumを定義し、各定数のインデックスを表示しています。

nameメソッド

nameメソッドは、Enumの定数の名前を文字列として取得するためのメソッドです。

このメソッドは、Enumの定数に対して自動的に生成され、定数の名前をそのまま返します。

以下のサンプルコードでは、nameメソッドの使い方を示しています。

// App.java
enum Vehicle {
    CAR, TRUCK, MOTORCYCLE
}
public class App {
    public static void main(String[] args) {
        // Enumの定数の名前を表示
        for (Vehicle vehicle : Vehicle.values()) {
            System.out.println(vehicle + "の名前: " + vehicle.name());
        }
    }
}
CARの名前: CAR
TRUCKの名前: TRUCK
MOTORCYCLEの名前: MOTORCYCLE

このコードでは、VehicleというEnumを定義し、各定数の名前を表示しています。

nameメソッドを使用することで、Enumの定数の名前を簡単に取得できます。

よくある質問

valuesメソッドはどのように動作しますか?

valuesメソッドは、Enum型に対して自動的に生成される静的メソッドで、Enumに定義されたすべての定数を配列として返します。

このメソッドは、Enumの定数を簡単に取得し、ループ処理や配列操作を行うために使用されます。

具体的には、Enumの各定数は、定義された順序で配列に格納され、配列の長さはEnumの定数の数と一致します。

valuesメソッドとvalueOfメソッドの違いは何ですか?

valuesメソッドvalueOfメソッドは、どちらもEnumに関連するメソッドですが、役割が異なります。

valuesメソッドは、Enumのすべての定数を配列として取得するのに対し、valueOfメソッドは、指定した文字列に対応するEnumの定数を取得します。

具体的には、valuesメソッドは定数の一覧を取得するために使用され、valueOfメソッドは文字列から特定の定数を取得するために使用されます。

Enumの値を動的に追加できますか?

JavaのEnumは、定数の集合を表現するための特別なクラスであり、定義された後に新しい値を動的に追加することはできません。

Enumの定数は、コンパイル時に決定され、変更することができないため、必要な定数はあらかじめEnumに定義しておく必要があります。

もし動的に値を追加する必要がある場合は、Enumではなく、通常のクラスやデータ構造(例えば、リストやマップ)を使用することを検討してください。

まとめ

この記事では、JavaのEnumクラスにおけるvaluesメソッドの使い方やその応用例、さらにEnumクラスのその他のメソッドについて詳しく解説しました。

Enumは、定数の集合を扱うための強力な機能を提供し、特にvaluesメソッドを利用することで、定数を簡単に取得したり、操作したりすることが可能です。

これを機に、Enumを活用してより効率的なコードを書くことに挑戦してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 列挙型 (2)
  • URLをコピーしました!
目次から探す