猿问

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

我正在尝试从数组中删除空值,然后返回它们以使用新值做一些其他事情。但是,我对如何获取更新的数组感到困惑。


这是空删除代码。


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中?我似乎找不到新值的存储位置。


谢谢,如有错误请指出。我已经讨论了半个小时了。


蝴蝶刀刀
浏览 159回答 3
3回答

牧羊人nacy

removeNull()noNulls返回在方法内部创建的数组。目前,在 中theBoundary(),您只需调用removeNull(bounds),但不将其分配给变量。新创建的无空数组被创建,未分配,并立即被垃圾收集。如果你想对你的非空数组做一些事情(我假设你这样做),请执行以下操作:public theBoundary(String[] bounds) {&nbsp; &nbsp; String[] withoutNulls = removeNull(bounds);&nbsp; &nbsp; doSomething(withoutNulls);&nbsp; // whatever you need here}请注意,除非您真的必须使用数组,否则请考虑使用 aList甚至 a Stream。List例子:List<String> list = ...&nbsp; // from somewhere elselist.removeIf(s -> s == null);doSomething(list);Stream例子:Stream<String> stream = ... //from somewhere elsestream.filter(s -> s != null);doSomething(stream);编辑即使您确实需要数组,以下内容也可以使用:String[] noNulls = (String[]) Arrays.stream(inputArray).filter(Objects::nonNull).toArray();

catspeake

我认为没有必要将数组迭代两次!您可以改为在数组上使用流并过滤不为 NOT NULL 的索引。此外,您可以在不需要创建removeNull方法的情况下执行此操作,并直接在您的theBoundary方法中执行此操作。您的代码如下所示:String[]&nbsp;arrayWithoutNull&nbsp;=&nbsp;Arrays.stream(bounds).filter(Objects::nonNull).toArray(String[]::new)我希望这能解决你的问题。

德玛西亚99

你是这个意思吗?public&nbsp;theBoundary(String[]&nbsp;bounds){ &nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;cleanedBounds&nbsp;=&nbsp;removeNull(bounds); }你没有在原地做,所以你需要将它分配回一个新数组
随时随地看视频慕课网APP

相关分类

Java
我要回答