3 回答
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();
TA贡献1111条经验 获得超0个赞
我认为没有必要将数组迭代两次!
您可以改为在数组上使用流并过滤不为 NOT NULL 的索引。
此外,您可以在不需要创建removeNull
方法的情况下执行此操作,并直接在您的theBoundary
方法中执行此操作。
您的代码如下所示:
String[] arrayWithoutNull = Arrays.stream(bounds).filter(Objects::nonNull).toArray(String[]::new)
我希望这能解决你的问题。
TA贡献1770条经验 获得超3个赞
你是这个意思吗?
public theBoundary(String[] bounds){ String[] cleanedBounds = removeNull(bounds); }
你没有在原地做,所以你需要将它分配回一个新数组
添加回答
举报