簡體   English   中英

如何比較列表和字符串數組(Java)?

[英]How to compare a list and string array (Java)?

我正在為Android編寫應用程序。 我使用字符串數組從共享的首選項中拉出所有玩家名稱(必須是字符串數組)。 我有一個列表,可以從共享的首選項中拉出所有活躍的玩家(必須是一個列表)。 我需要檢查列表以查看是否包含不在播放器陣列中的任何播放器並將其刪除。 我似乎無法弄清楚邏輯。

例如:

列表包含:bcae

數組包含:abcd

由於“ e”存在於列表中,但不存在於數組中,因此需要從列表中刪除“ e”。 我知道命令(.contains()、. remove(),for()),我只是無法弄清楚邏輯。

我的第一次嘗試是:

for(int x=0;x<numOfPlayers;x++){
        players[x] = getPrefs.getString("player"+Integer.toString(x), " ");
        if(activePlayers.size()>0)
            if(activePlayers.contains(players[x]))
                playersChecked[x] = true;
        else{
            if(x<activePlayers.size())
                activePlayers.remove(x);
        }
    }

但這會在player [x]包含activePlayers沒有的項目時從activePlayers中刪除x,這很好。 它需要反過來。

您正在尋找的是Collection.retainAll

僅保留此集合中包含在指定集合中的元素

list.retainAll(Arrays.asList(array));

重要的一點將使您的生活變得困難,您的方法將產生不良后果。 刪除播放器將更改列表中的元素,這樣您最終將跳過播放器。

例如,在列表中:

{A,B,C}

如果刪除B,最終得到:

{A,C}

當x遞增時,您最終得到x = 3,該值曾經指向C。但是現在它什么也沒有指向。

而是考慮使用迭代器。 請參閱: Java中的迭代器

這樣一來,您就可以刪除元素,而不會破壞索引。

因此,為了回答您的問題,我將在activePlayers上創建一個迭代器。 進行迭代時,只需對照列表檢查迭代器中的每個項目,如果未找到則將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM