私はセットにいくつかのオブジェクトを追加するためにJavaでツリーセットを使用しています。各オブジェクトは、異なるプロパティを持つ信号です。新しいシグナルが来るたびに、オブジェクト (シグナル) のいくつかの属性を設定し、それをセットに追加します。シグナルは複数回来る可能性があります。シグナルの場合、シグナル名を保存するリストを維持し、シグナルが来ると、シグナルがリストにあるかどうかを確認しますリストにない場合は、新しいオブジェクトをセットに追加するだけですが、シグナルがリストでは、セットからその信号を取得し、その属性の一部を変更し、信号を削除して新しい信号を追加します。
問題は、I シグナルが 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);
さらに、シグナルの出現に基づいてファイル内のシグナルをソートしようとします。出現の値が高いほど、ファイル内にある必要があります。
これがSignal.javaのcompareToのコードです(初めてツリーセットを使用しているので、comapreToを実装する方法がわかりません)
@Override
public int compareTo(Signal signal) {
int thisOccurance = this.getOccurance();
return thisOccurance.compareTo(signal.getOccurance());
}
どんな助けでも大歓迎です...
前もって感謝します