繁体   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