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); }
你沒有在原地做,所以你需要將它分配回一個新數組
添加回答
舉報