Java是否存在内置方法过滤数组中的非空对象?
Java有没有内置方法替代我写的非空对象数组过滤方法?
嘿,这个问题问得好!咱们一步步来理清楚:
首先直接给你答案:Java标准库里并没有专门提供和你写的getArrayNotNulls功能完全一致的现成静态方法——不管是Collections还是Arrays类里,都找不到类似Collections.getArrayNotNull(...)这种直接调用的方法。
然后说说你提到的Stream API调用问题:你说Arrays.stream(1,2,null,3).filter(Objects::nonNull).toArray()跑不起来,其实是编译器的类型推断卡壳了——你同时传了基本类型int和null(属于Object类型),编译器没法自动判断要把这些参数打包成Integer[]还是Object[]。解决这个问题很简单,这里给你两个标准库的替代方案:
方案1:显式指定数组类型给Arrays.stream
Object[] x = Arrays.stream(new Object[]{1, 2, null, 3}) .filter(Objects::nonNull) .toArray();
方案2:用Stream.of()(更贴近你的调用习惯)
Stream.of()本身就支持Object...可变参数,所以可以直接像你调用自定义方法那样传参数:
Object[] x = Stream.of(1, 2, null, 3) .filter(Objects::nonNull) .toArray();
这个写法和你的getArrayNotNulls(1,2,null,3)调用几乎一样,而且完全用的是Java标准库的API。
最后说一句:你自己写的getArrayNotNulls方法非常简洁高效,如果团队里大家都习惯用这个自定义方法,完全可以继续用;要是想依赖标准库,上面的Stream.of方案就是完美替代~
内容的提问来源于stack exchange,提问作者Mayday
相关产品推荐
相关产品推荐

