java 我怎样才能让这个for循环反复遍历一个数组列表,直到达到一个条件?

pkwftd7m  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(138)

我使用这个方法搜索Person类型的数组列表,并根据名字删除一个特定的数组。
它工作正常。
但它只删除了一个人,然后就停止了。

public void deleteFriend(String firstName){
                Person friendToDelete = null;
                for(Person f : friendsList){
                    if(f.getFirstName().equalsIgnoreCase(firstName)){
                        friendToDelete = f;
                    }
                }
                if(friendToDelete != null){
                    friendsList.remove(friendToDelete);
                    System.out.println("Friend deleted.");
                }
        }

假设我的列表friendsList中有两个名字为Shane的人,我希望我的方法删除*allShanes *。
我尝试了以下方法:

public void deleteFriend(String firstName){
        //Person friendToDelete = null;
        for(Person f : friendsList){
            if(f.getFirstName().equalsIgnoreCase(firstName)){
                friendsList.remove(f);
                continue; 
            }
        }
    }

在上面的例子中,我尝试了if循环的一些变体。首先,我尝试了break;而不是continue;。我还尝试了完全删除该行。

if(f.getFirstName().equalsIgnoreCase(firstName))
                friendsList.remove(f);

它仍然只删除了第一个谢恩。
我尝试设置一个条件来检查是否存在名为ShanePerson示例,如果为真,则遍历包含for(Person f : friendsList)的列表并将其删除,然后检查是否仍存在Shane,并再次执行此操作。
但我能感觉到我的方法行不通:

public void deleteFriend(String firstName){
                //Person friendToDelete = null;
                for(Person f : friendsList){
                    int cond = 0;
                    while(cond == 0){
                        if(f.getFirstName().equalsIgnoreCase(firstName)){
                            friendsList.remove(f);
                        }
                        else{
                            // ??? cond = 1?
                        }
                    }
                }
        }

有人能帮我做我想做的事情或者给我指出正确的方向吗?

ogq8wdun

ogq8wdun1#

您可以使用Java 8方法Collection.removeIf()(预期为Predicate)来执行此操作,并使您的代码更加简单。
要根据特定条件对列表执行删除操作,只需执行以下操作:

friendsList.removeIf(p -> p.getFirstName().equalsIgnoreCase(firstName));

下面是关于它的一些详细信息:操作和移除项目- Collection.removeIf

yv5phkfx

yv5phkfx2#

实现这一点的一种方法是使用索引遍历朋友列表,如下所示:

int index = 0;
for(int i = 0; i < friendsList.length; i++) {
    if(!friendsList[i].getFirstName().equalsIgnoreCase(firstName)) {
        friendsList[index++] = friendsList[i];
    }
}

return Arrays.copyOf(friendsList, index);

正如在这个Geeks for Geeks页面中所看到的。检查它的其他选项,如过滤您的列表(这是更简单和更快)。

相关问题