亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從數組中刪除空值并從 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 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號