如何获取排除指定元素的Java枚举值数组?
解决枚举Stream过滤后转指定类型数组的问题
嘿,这个问题我之前踩过坑!你的过滤逻辑完全没问题,问题出在toArray()的调用方式上——默认的无参toArray()返回的是Object[]类型,没法直接赋值给Actions[]变量。
你只需要改用toArray()的重载版本,传入一个数组生成器就能搞定,单行代码就能实现:
Actions[] noF = Arrays.stream(Actions.values()).filter(value -> value != Actions.f).toArray(Actions[]::new);
为什么这样能行?
toArray(IntFunction<A[]> generator)这个重载方法会根据Stream里的元素数量,调用你传入的生成器(这里用方法引用Actions[]::new等价于size -> new Actions[size])创建对应长度的Actions[]数组,然后把过滤后的元素填充进去,完美匹配你需要的类型。
如果用默认的无参toArray(),Java没法推断出你想要的数组类型,只能返回最通用的Object[],这就是你之前代码报错的原因啦。
内容的提问来源于stack exchange,提问作者Steve W
相关产品推荐
相关产品推荐

