这与我之前问过的一个问题有关: 遍历 hashmap 并创建唯一对象 - 试图防止重复
虽然我假设我可以为我的 add 方法的 remove 方法应用类似的逻辑,但我必须检查不存在的记录的异常被抛出,即使我非常清楚该记录存在并且应该被删除。我的删除方法如下:
public boolean removePatron(int libraryCardNumber) throws PatronException {
boolean patronRemoved = false;
int keyToRemove = 0;
for (Map.Entry<Integer, Patron> entry : patrons.entrySet()) {
if (entry.getValue().getCardNumber() != libraryCardNumber) {
throw new PatronException("This record does not exist");
}
keyToRemove = entry.getKey();
}
patrons.remove(keyToRemove);
patronRemoved = true;
return patronRemoved;
}
作为参考,Patron 对象如下所示:
public class Patron {
//attributes
private String name = null;
private int cardNumber = 0;
//operations
public Patron (String name, int cardNumber){
this.name = name;
this.cardNumber = cardNumber;
}
public String getName(){
return name;
}
public int getCardNumber(){
return cardNumber;
}
}
我的测试只是先添加三个顾客,然后尝试通过我知道会存在的卡号将其删除。我在我的 add 方法中添加了赞助人号码的 println,这样我可以很容易地看到它们,同时在 eclipse 中添加它们时弄乱这个。
@Test
public void testRemovePatron() {
boolean exceptionThrown = false;
try {
testLibrary.addPatron("TestName");
testLibrary.addPatron("TestName2");
testLibrary.addPatron("TestName3");
testLibrary.removePatron(1);
} catch (PatronException e) {
System.out.println(e.getMessage());
exceptionThrown = true;
fail("what the hell is going on");
}
assertFalse(exceptionThrown);
}
我从每次抛出的 remove 方法中得到异常。
编辑:我对提供的答案做了一个小改动,以说明如果找不到匹配项则需要抛出异常:
public boolean removePatron(int libraryCardNumber) throws PatronException {
boolean patronRemoved = false;
int keyToRemove = 0;
for (Map.Entry<Integer, Patron> entry : patrons.entrySet())
{
if (entry.getValue().getCardNumber() == libraryCardNumber)
{
keyToRemove = entry.getKey();
patronRemoved = true;
}
}
if (patronRemoved)
{
patrons.remove(keyToRemove);
} else {
throw new PatronException("This record did not exist");
}
return patronRemoved;
}