为了账号安全,请及时绑定邮箱和手机立即绑定

从数组中删除空值并从 Java 中的方法获取它

从数组中删除空值并从 Java 中的方法获取它

蝴蝶刀刀 2023-06-04 17:54:03
我正在尝试从数组中删除空值,然后返回它们以使用新值做一些其他事情。但是,我对如何获取更新的数组感到困惑。这是空删除代码。String[] removeNull(String[] nullArray) {        int nullCounter = 0;        //checking if any is null        for(int i = 0; i < nullArray.length; i++) {            if(nullArray[i]==null) {                nullCounter++;            }        }        String[] noNulls = new String[nullArray.length-nullCounter];        if(nullCounter>0) {        //make a non null array            for(int i = 0, j = 0; i <noNulls.length; i++) {                if(nullArray[i]!=null) {                    noNulls[j] = nullArray[i];                    j++;                }            }        }    return noNulls;     }我很确定这已经是正确的(如果我错了请纠正我)。然后,我在构造函数中调用它。public theBoundary(String[] bounds){   removeNull(bounds);}我调用 removeNull(bounds) 后,新数组的值是否存储在数组边界中?还是会存储在数组noNull中?我似乎找不到新值的存储位置。谢谢,如有错误请指出。我已经讨论了半个小时了。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

removeNull()noNulls返回在方法内部创建的数组。目前,在 中theBoundary(),您只需调用removeNull(bounds),但不将其分配给变量。新创建的无空数组被创建,未分配,并立即被垃圾收集。


如果你想对你的非空数组做一些事情(我假设你这样做),请执行以下操作:


public theBoundary(String[] bounds) {

    String[] withoutNulls = removeNull(bounds);


    doSomething(withoutNulls);  // whatever you need here

}

请注意,除非您真的必须使用数组,否则请考虑使用 aList甚至 a Stream。


List例子:


List<String> list = ...  // from somewhere else

list.removeIf(s -> s == null);


doSomething(list);

Stream例子:


Stream<String> stream = ... //from somewhere else

stream.filter(s -> s != null);


doSomething(stream);

编辑


即使您确实需要数组,以下内容也可以使用:


String[] noNulls = (String[]) Arrays.stream(inputArray).filter(Objects::nonNull).toArray();



查看完整回答
反对 回复 2023-06-04
?
catspeake

TA贡献1111条经验 获得超0个赞

我认为没有必要将数组迭代两次!

您可以改为在数组上使用流并过滤不为 NOT NULL 的索引。

此外,您可以在不需要创建removeNull方法的情况下执行此操作,并直接在您的theBoundary方法中执行此操作。

您的代码如下所示:

String[] arrayWithoutNull = Arrays.stream(bounds).filter(Objects::nonNull).toArray(String[]::new)

我希望这能解决你的问题。


查看完整回答
反对 回复 2023-06-04
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

你是这个意思吗?

public theBoundary(String[] bounds){
    String[] cleanedBounds = removeNull(bounds);
}

你没有在原地做,所以你需要将它分配回一个新数组


查看完整回答
反对 回复 2023-06-04
  • 3 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信