Android Java:ArraylistMultiMap与该键关联的最后一个值未被删除

时间:2016-09-28 06:29:18

标签: java android-studio arraylist multimap

在我的Android程序中,我在我的一项活动中声明了一个Multimap: -

Multimap<String, String> myMultimap = new ArrayListMultimap<String,String>();

存储属于租借这些图书的客户的图书的名称。

在这里,客户是关键,书籍的名称是属于该关键字的多个值。

我有一个java类'Books',它有以下方法: -

  1. deleteBooks()从与密钥关联的众多值中删除特定值。
  2. 以下是代码: -

    public ArrayList deleteBooks(String customer_name, String book_name)
    {
        Iterator keyIterator=myMultimap.keySet().iterator();
        while(keyIterator.hasNext())
        {
            Object key =  keyIterator.next();
            Collecton cl1=myMultimap.get(customer_name);
    
            if(myMultimap.containsEntry(customer_name,book_name))
            {
                if(cl1.size()==1 && cl1.contains(book_name))
                {
                    keyIterator.remove();
                }
                cl1.remove(book_name);
            }
        }
    
        al2=new ArrayList(cl1);
        return al2;
    }
    

    deleteBooks()将一个数组列表返回给MainActivity,该列表在属于特定客户的列表视图中显示所有书名。

    当客户删除列表视图中显示的众多书名之一时,书籍将被删除。但是,当键值对中只剩下一本书时会出现问题。

    地图中的最后一本书不会被删除。

    我编写了代码来检查地图中是否只剩下一本书,然后应该删除整个键,但键值对中的最后一个值仍然没有删除。

    这个问题是与Multimaps有关还是我的代码中某处出错?

2 个答案:

答案 0 :(得分:1)

如果我没有错,那么你应该试试

if(cl1.size()==0 && cl1.contains(book_name))
 {
  keyIterator.remove();
}

而不是

if(cl1.size()==1 && cl1.contains(book_name))
 {
  keyIterator.remove();
}

答案 1 :(得分:0)

(代表问题作者发布的答案)

我进行了以下更改:

public ArrayList deleteBooks(String customer_name, String book_name)
{
    if(myMultimap.containsEntry(customer_name,book_name))
    {
       int count=myMultimap.keys().count(customer_name);

       if(count==1)
       {
           myMultimap.removeAll(emailID);
           al2.clear();
       }
       else
       {
           myMultimap.remove(customer_name,book_name);
           cl1=myMultimap.get(customer_name);
           al2=new ArrayList(cl1);
       }
    }
    return al2;
}

这是我的活动“ A”,它调用deleteBooks():

public void onClick(DialogInterface dialog, int which)
        {
            arrList1=cd.deleteBooks(customer_name,book_name);
            if(arrList1.isEmpty())
            {
                arrList1.clear();
                lv1.setAdapter(null);
                arrayAdapter.notifyDataSetChanged();
                Toast.makeText(getActivity(), "You have no books in you collection", Toast.LENGTH_SHORT).show();
            }
            else {
                arrayAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, arrList1);
                lv1.setAdapter(arrayAdapter);
                Toast.makeText(getActivity(), book_name + " has been removed from your collection", Toast.LENGTH_SHORT).show();
            }
        }

现在,所有元素都将被删除。