删除人名

时间:2016-04-12 17:23:13

标签: java arraylist

我正在创建一种方法,从该人的朋友列表中删除名为Mikel的人的第一个实例p,并从朋友列表中删除此人。当且仅当在此人的朋友列表中找到p时返回true。我运行我的代码,但它没有工作,我无法弄清楚问题。有人可以帮助我。

String name;

private ArrayList<Person> friend = new ArrayList<Person>();

public boolean deleteFriend(String Mike)
{
    for (Person p : friend ) {
        if (p.name.equals(Mike)) {
            p.friend.remove(Mike);
            break;
        }
        else{
            return false;
        }           
    }
    return true;
}

2 个答案:

答案 0 :(得分:0)

我以为我会写一些伪代码来说明你可能想做什么。鉴于你没有发布Person类,这几乎是我认为我能想到的。

public boolean delete(String username) {

    // I don't know what you have implemented to go 
    // from username to Person to friends
    List<Person> usersFriends = getFriends(username);  

    // iterating over Mikel's friends
    for(Person usersFriend: usersFriends) {
        // Mikel's friends friendList
        List<Person> usersFriendsList = usersFriend.friends;

        // Mikel's friend's friendlist
        Iterator usersFriendsListIterator = usersFriendsList.iterator();
        // if Mikel shows up, remove him
        while(usersFriendsListIterator.hasNext()) {
            if(usersFriendsListIterator.next().equals(**username**))
                usersFriendsListIterator.remove();
        }
    }
}

答案 1 :(得分:0)

假设您有一个定义良好的Person类,您可以使用迭代器安全地删除和检索删除状态:

//String s = "Mike" 
//           or whatever;

public boolean deleteFriend (String s){
    Iterator<Person> it = friend.iterator();
    Person p = null;
    boolean found = false;

    while(it.hasNext() && !found){
       p = it.next(); 
       if (p.getName().equals(s)) {it.remove(); found = true;}
    }

    return found;
}

如果您更喜欢较短的版本,可以使用Java8内部迭代器removeIf

public boolean deleteFriendJava8 (String s){
    int initSize = friend.size(); 

    friend.removeIf(p -> p.getName().equals(s));

    return (initSize != friend.size());
}

getName()(在两种情况下)都是返回Person名称的方法。那个方法应该在Person类中明确定义。

关于实例变量friend,您应该这样声明:

private List<Person> friend = new ArrayList<>();

因为这样可以增加friend抽象级别(你不会将friend限制为ArrayList,这更具体)。