我有一个由空格分隔的位(1和0(组成的字符串,我想将其转换为枚举数组。以下是我迄今为止的努力。
这是枚举类
enum Color { RED, GREEN }
这是转换代码。
Color[] colors = (Color[]) Arrays.stream(sc.nextLine().split("\s"))
.map(i -> {
if (i.equals("0")) return Color.RED;
else return Color.GREEN;
})
.toArray();
我正面临以下问题与此代码:
它使用类型转换将
Object
s的数组更改为Color
s的数组,这可能会产生运行时错误。如果没有类型铸造,我会非常喜欢。地图功能。我在
mapToObj
上的StackOverflow上搜索了这里,看看是否有一种方法可以指定映射的返回类型。我认为指定映射应返回Color
对象会更安全。
要避免强制转换,请将参数传递给toArray
:
.toArray(Color[]::new)
这是唯一需要的更改。
不需要为map函数指定返回类型。您只返回Color
的实例,这意味着它的返回类型是Color
。
这是一条路:
Color[] colors = Arrays.stream(sc.nextLine().split("\s"))
.map(i -> i.equals("0") ? Color.RED : Color.GREEN)
.toArray(Color[]::new);
如果要将Stream
转换为对象数组,则需要使用Stream::toArray(IntFunction)
方法。