public NobelPrizeWinners()
{
winners = new HashMap<Integer, String[]>();
String[] people = new String[1];
people[0] = "Barack H. Obama";
winners.put(new Integer(2009), people);
people = new String[1];
people[0] = "Martti Ahtisaari";
winners.put(new Integer(2008), people);
people = new String[2];
people[0] = "Intergovernmental Panel on Climate Change (IPCC)";
people[1] = "Albert Arnold (Al) Gore Jr.";
winners.put(new Integer(2007), people);
people = new String[2];
people[0] = "Muhammad Yunus";
people[1] = "Grameen Bank";
winners.put(new Integer(2006), people);
}
public void removeWinner(String nameOfWinnerToRemove)
{
Set<Integer> allYears = winners.keySet();
for(Integer year : allYears)
{
String[] eachYearWinners = winners.get(year);
for (String winner : eachYearWinners)
{
if(winner.equalsIgnoreCase(nameOfWinnerToRemove))
{
winners.remove(year, nameOfWinnerToRemove);
if(eachYearWinners.length < 1)
{
winners.remove(year);
}
}
}
}
}
我想删除用户提供的获胜者(nameOfWinnerToRemove),如果没有匹配的名称则不执行任何操作。并且,如果键为空,则删除键(整数)。 就像,我想删除&#34; Barack H. Obama&#34;在2009年,如果我这样做,2009年将会出现空白,那么我必须删除2009年。我怎么能做到这一点?
答案 0 :(得分:1)
重要的是,如果要在迭代时从集合中删除任何值,请使用集合提供的Iterator
。
请检查以下代码是否适合您。
public void removeWinner(String nameOfWinnerToRemove)
{
Iterator<Integer> iterator = winners.keySet().iterator();
//for(Integer year : allYears)
while(iterator.hasNext())
{
Integer year = iterator.next();
String[] eachYearWinners = winners.get(year);
for (String winner : eachYearWinners)
{
if(winner.equalsIgnoreCase(nameOfWinnerToRemove))
{
//winners.remove(year, nameOfWinnerToRemove); // ??? What is data type of winners I cant find remove method in a map that accepts two parameters
if(eachYearWinners.length < 1)
{
iterator.remove();// You should use Iterators Remove Method when you want to remove key in the iteration
// winners.remove(year);
}
}
}
}
}