使用java8流将一个位字符串转换为枚举数组



我有一个由空格分隔的位(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();

我正面临以下问题与此代码:

  1. 它使用类型转换将Objects的数组更改为Colors的数组,这可能会产生运行时错误。如果没有类型铸造,我会非常喜欢。

  2. 地图功能。我在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)方法。

最新更新