从personList中删除一个人

时间:2014-08-18 06:12:32

标签: java android collections arraylist google-plus

我的应用中包含Google plus。我正在尝试将我的应用程序分享给ListView中显示的朋友列表中的特定人员。

在列表视图中选择人物时,我将它们添加到收件人arraylist。

如下所示:

 private ArrayList<Person> recipients;
 recipients= new ArrayList<Person>();
 recipients.add(PlusShare.createPerson(person_ID, person_DISPLAY_NAME));

我还有一个打开共享活动的按钮,并使用收件人arraylist获取人员ID,要分享的名称。这部分工作正常。

现在我想从收件人数组列表中删除某个人。这也是在项目点击时完成的。

我尝试了以下内容:

 recipients.remove(person_ID);

这样我就无法从arraylist中删除该项目。如何从recipeints arraylist中删除人员详细信息?

3 个答案:

答案 0 :(得分:2)

您必须明确删除类Person的对象。

试试这个:

recipients.remove(PlusShare.createPerson(person_ID, person_DISPLAY_NAME));

或者您可以迭代列表中的所有人,比较ID并删除具有匹配ID的元素。

for (Iterator<Person> it = recipients.iterator(); it.hasNext();) {
    Person p = it.next();
    if (p.getId() == person_ID) { // <-- supposed that getId() exists
        it.remove();
    }
}

答案 1 :(得分:0)

由于您的person_ID是唯一的,您可以使用地图界面,您可以使用person_ID作为是对象Person

<强>样品:

Map<Integer, Person> map = new HashMap<>();

将对象放入地图

map.put(person_ID, PlusShare.createPerson(person_ID, person_DISPLAY_NAME));

获取/删除地图

if(map.get(person_ID) != null)
   map.remove(person_ID);

关于使用Map的原因是它的速度为O(1) big-O

答案 2 :(得分:0)

我会使用额外的Map来存储其ID引用的Person对象。这样,您就可以将正确的对象移除到列表中。

private ArrayList<Person> recipients;
recipients= new ArrayList<Person>();
private Map<String,Person> recipientsById = new HashMap<String,Person>;
Person newPerson = PlusShare.createPerson(person_ID, person_DISPLAY_NAME);
recipients.add(newPerson);
recipientsById.put(personId,newPerson);

这样,从列表中删除对象就会变成:

recipients.remove(recipientsById.get(person_ID));
recipientsById.remove(person_ID);

当然,现在有2个变量要处理,这可能看起来很复杂。因此,还有两个解决方案只能使用一个变量:

  • 您可以浏览您的arraylist以查找具有personID的人,并删除此人
  • 你可以用HashMap替换你的arraylist,它可以根据你的用途而有效。

所以有3种解决方案适合您。选择正确的取决于您和您的问题中未说明的实施细节。

(编辑:最后的解决方案都是由@rod和@Ridcully提供的)