0

私はセットにいくつかのオブジェクトを追加するために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());
   }  

どんな助けでも大歓迎です...

前もって感謝します

4

1 に答える 1