プロが教える店舗&オフィスのセキュリティ対策術

int型のパラメータを持つenumがあって、
int型の配列をenum型の配列に変換したいのですが、
streamを使ったenum型への型変換の仕方がわかりません
どのように書けば実現できるでしょうか?


import java.util.Arrays;

public class Main {
public static void main(String[] args) throws Exception {

MyEnum myEnum = MyEnum.valueOf(2);
System.out.println(myEnum);

MyEnum[] myEnums = MyEnum.valuesOf(new int[]{2,3,4});
System.out.println(Arrays.toString(myEnums));
}
enum MyEnum{
A(1),B(2),C(3),D(4);
final int ID;
MyEnum(int id){
this.ID = id;
}
static MyEnum valueOf(int id){
return Arrays.stream(values()).filter(v->v.ID==id).findFirst().orElseThrow(()->new IllegalArgumentException());
}
static MyEnum[] valuesOf(int[] ids){
return (MyEnum[]) Arrays.stream(ids).mapToObj(MyEnum::valueOf).toArray();
//ClassCastException cannot cast Obj -> MyEnum
}
}
}

A 回答 (1件)

Stream<T> から T[] に変換するには、以下のメソッドを使います


https://docs.oracle.com/javase/jp/8/docs/api/jav …

少しややこしいのですが、Java のジェネリックの仕組み上、型キャストが使えないので
このようなおまじない記述になってしまうようです。


MyEnum[] a = Arrays.stream(ids).mapToObj(MyEnum::valueOf).toArray(MyEnum[]::new);
    • good
    • 0
この回答へのお礼

なるほど!toArray(MyEnum[]::new)のような書き方ができるのですね!
解決しました!ありがとうございました!

お礼日時:2017/10/11 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!