在我的Android程序中,我在我的一项活动中声明了一个Multimap: -
Multimap<String, String> myMultimap = new ArrayListMultimap<String,String>();
存储属于租借这些图书的客户的图书的名称。
在这里,客户是关键,书籍的名称是属于该关键字的多个值。
我有一个java类'Books',它有以下方法: -
以下是代码: -
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有关还是我的代码中某处出错?
答案 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();
}
}
现在,所有元素都将被删除。