オリジナルポストが
はい、それは良いのJava 8の方法ですが、...
toString
を上書きすることができますので、あなたはより良い(enum定数の名前を返しますWeather::name
でいいよ正確列挙宣言で宣言されたように)変更することはできません。
Stream.of(Weather.values()).map(Weather::name).toArray(String[]::new);
ジェネリック
のビット
私は一般的な方法で任意の列挙に対処するためのヘルパークラスを書いた:ここ
class EnumUtils {
public static <T extends Enum<T>> String[] getStringValues(Class<T> enumClass) {
return getStringValuesWithStringExtractor(enumClass, Enum::name);
}
public static <T extends Enum<T>> String[] getStringValuesWithStringExtractor(
Class<T> enumClass,
Function<? super T, String> extractor
) {
return of(enumClass.getEnumConstants()).map(extractor).toArray(String[]::new);
}
}
はデモンストレーションです:
enum Weather {
RAINY, SUNNY, STORMY;
@Override
public String toString() {
return String.valueOf(hashCode());
}
public static void main(String[] args) {
System.out.println(Arrays.toString(EnumUtils.getStringValues(Weather.class)));
System.out.println(Arrays.toString(EnumUtils.getStringValuesWithStringExtractor(Weather.class, Weather::toString)));
}
}
そして出力:
[RAINY, SUNNY, STORMY]
[359023572, 305808283, 2111991224]
変更できます列挙型ですか?列挙型の内部に配列を構築し、それを取得するゲッターを提供するだけです。 –
@ christopher-schneider:できます。しかし、それはポイントではありません。私の指摘は最小限の変換を作成することであり、どこにあるかは関係ありません。 –