2013-09-23 6 views
0

Я работаю с Tree Set в java, чтобы добавить некоторые объекты в набор. Каждый объект представляет собой сигнал с разными свойствами. Каждый раз, когда появляется новый сигнал, я устанавливаю некоторые атрибуты объекта (Signal) и добавляю его в набор, сигнал может поступать более одного раза. Для сигналов я просматриваю список, в котором храню имя сигнала, и когда я нахожу сигнал, я проверяю, находится ли сигнал в списке или нет. Если его нет в списке, я просто добавляю новый объект в свой набор, но если сигнал в списке я беру этот сигнал из набора и изменяю некоторые его атрибуты, удаляю сигнал и добавляю новый.Удаление объекта и добавление другого в TreeSet

Проблема заключается в том, что когда я посылаю сигнал 2-го или 3-го раза и т. Д., Он не удаляет старый сигнал и не сохраняет все события одного и того же сигнала с измененными атрибутами.

Вот мой код

SortedSet<Signal> set = new TreeSet<Signal>(); 

ArrayList<String> messages = new ArrayList<String>(); 

    //If the Message is new one    
      if(!messages.contains(messageName)){ 
       //System.out.println("I am new signal"); 
       //Add the new Message in Message List 
       messages.add(messageName); 

       //Create Object of Message to be stored in Set 
       signal = new Signal(); 
       signal.setSource(messageSource); 
       signal.setName(messageName); 
       if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
        signal.setComponent(egdci_ugdci_msgComponent); 
       else 
        signal.setComponent(messageComponent); 
       signal.setOccurance(messageCounter); 
       signal.setSize(messageContent.length); 
       signal.setBandwidth(0F); 

       //Add the new Message Object in the Set 
       set.add(signal); 
      }    
      //If Message already exists in the list 
      else{ 
       //System.out.println("I am old one"); 
       Iterator<Signal> iterator = set.iterator(); 
       while(iterator.hasNext()) { 
        signal = (Signal)iterator.next(); 
        if(signal.getName().equalsIgnoreCase(messageName)){ 
         System.out.println("I am here"); 
         int occurance = signal.getOccurance() + 1; 
         int size = occurance * messageContent.length; 
         float bandwidth = 0F;       
         set.remove(signal); 

         signal = new Signal(); 
         signal.setSource(messageSource); 
         signal.setName(messageName); 
         if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
          signal.setComponent(egdci_ugdci_msgComponent); 
         else 
          signal.setComponent(messageComponent); 
         signal.setOccurance(occurance); 
         signal.setSize(size); 
         signal.setBandwidth(bandwidth); 

         //Add the new Message Object in the Set 
         set.add(signal); 
        }       
       } 
      } 

    writeToCSV(signal , writer); 

Более Стараюсь сортировать свои сигналы в файл на основе вхождения сигнала, тем выше значение вхождения, на вершине должна быть в файл.

Вот мой код CompareTo в Signal.java (я использую Tree Set в первый раз так что не уверен, как реализовать свой comapreTo)

@Override 
    public int compareTo(Signal signal) { 
     int thisOccurance = this.getOccurance(); 
     return thisOccurance.compareTo(signal.getOccurance()); 
    } 

Любая помощь будет высоко ценится ...

заранее спасибо

ответ

1

Если проблема только удалить старый сигнал, вы можете использовать его удалить с:

iterator.remove(); 

После окончания действия вы можете создать, а затем добавить новый сигнал в набор.

Вы еще условие должно выглядеть следующим образом:

else { 
     // System.out.println("I am old one"); 
     final Iterator<Signal> iterator = set.iterator(); 
     boolean deleted = false; 
     while (iterator.hasNext()) { 
      signal = (Signal)iterator.next(); 
      if(signal.getName().equalsIgnoreCase(messageName)){ 
       iterator.remove(); 
       deleted = true; 
       break; 
      } 
     } 
     if(delted){ 
      int occurance = signal.getOccurance() + 1; 
      int size = occurance * messageContent.length; 
      float bandwidth = 0F;    

      signal = new Signal(); 
      signal.setSource(messageSource); 
      signal.setName(messageName); 
      if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
       signal.setComponent(egdci_ugdci_msgComponent); 
      else 
       signal.setComponent(messageComponent); 
      signal.setOccurance(occurance); 
      signal.setSize(size); 
      signal.setBandwidth(bandwidth); 

      //Add the new Message Object in the Set 
      set.add(signal); 
     } 
    } 
+0

В моем состоянии я еще итерацию над моим набором найти сигнал, я ищу и удалить его из множества это не правильный способ сделать это? Пожалуйста, взгляните на мой код – Wearybands

+0

Я прочитал ваш код. Там вы меняете структуру набора, пока используете его, вы должны использовать метод «удалить» Iterator для удаления элемента (а затем, если вы предпочитаете перерыв в то время). И как только вы закончите, вы можете добавить новый сигнал. –

+0

Не понял свою мысль. Можете ли вы показать мне, редактируя мой код? – Wearybands

 Смежные вопросы

  • Нет связанных вопросов^_^