首页 > 解决方案 > 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;
            }
         }
      }
   }

标签: javagenericsarraylisttreemapgeneric-programming

解决方案


推荐阅读