Я работаю с 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());
}
Любая помощь будет высоко ценится ...
заранее спасибо
В моем состоянии я еще итерацию над моим набором найти сигнал, я ищу и удалить его из множества это не правильный способ сделать это? Пожалуйста, взгляните на мой код – Wearybands
Я прочитал ваш код. Там вы меняете структуру набора, пока используете его, вы должны использовать метод «удалить» Iterator для удаления элемента (а затем, если вы предпочитаете перерыв в то время). И как только вы закончите, вы можете добавить новый сигнал. –
Не понял свою мысль. Можете ли вы показать мне, редактируя мой код? – Wearybands