java - Java, removing objects in one method from an array list value of treemap
问题描述
So I have a TreeMap in this format TreeMap<String, List>. I have a generic class Message and T can be either Text, Voice, or Media classes. Item is the super class of Message. I am trying to remove the first message that is of class Media in each list value for the treemap. My program takes an input 2 which erases the first media message. But when I input 1, which lists the treemap values, the messages are still there when I display it. I know I picked the first message that is media, because I printed the message out before removing it. What am I doing wrong?
public void run() {
boolean res = true;
do {
System.out.println("1. List all accounts \n 2. Erase the first media" +
" message \n 3. equals Test \n 4. Quit \n\n Enter a choice " +
"(1-4)");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
switch(choice) {
case 1:
this.listAccounts();
break;
case 2:
this.eraseMedia();
break;
case 3:
this.equalsTest();
break;
case 4:
res = false;
System.exit(0);
scanner.close();
break;
}
}while(res);
}
private void listAccounts() {
String key = null;
List<Item> value = null;
Item element = null;
System.out.println("List of All Accounts");
for(Map.Entry <String, List<Item>> entry: treeMap.entrySet()) {
double charges = 0;
System.out.println("Account:" + entry.getKey());
value = treeMap.get(entry.getKey());
ListIterator<Item> iter = value.listIterator();
while(iter.hasNext()) {
element = iter.next();
System.out.println(element.toString());
charges += element.getCharge();
}
System.out.println("Total Charges: " + charges);
}
}
private void eraseMedia() {
List<Item> value = null;
for(Map.Entry <String, List<Item>> entry: treeMap.entrySet()) {
value = treeMap.get(entry.getKey());
this.eraseHelper(value);
}
}
private void eraseHelper(List<? extends Item> list) {
for(Item element: list) {
if(element instanceof Message<?>) {
Message<?> message = (Message<?>) element;
if(message.getMessage() instanceof Media) {
System.out.println(message.getMessage());
list.remove(message);
break;
}
}
}
}
解决方案
推荐阅读
- hadoop - 如何在实际运行之前检测 oozie 工作流程中的错误?
- python - 为什么它一直向我返回“theIndentationError:意外缩进”,当我在终端中输入相同的代码时一切都很好?
- java - 如何跟踪快速排序中的枢轴数量?
- python - PySide2 | 找出按下了哪个 QKeySequence 2
- amazon-web-services - 如何从 CloudWatch API 获取最新的日志事件?
- php - Laravel Eloquent 关系获取第三个表/关系值
- html - 如何根据条件在角度组件模板中的多个部分之间切换
- java - Firebase 模型 POJO getter 在 FirebaseRecyclerAdapter 中返回 null
- c++ - 在 C++ 中通过逆拉普拉斯算子去除阴影
- javascript - 如何重新渲染父组件按钮 React.js