gpt4 book ai didi

java - 删除一个对象并在 TreeSet 中添加另一个对象

转载 作者:行者123 更新时间:2023-12-01 14:05:08 24 4
gpt4 key购买 nike

我正在使用java中的树集在集合中添加一些对象。每个对象都是具有不同属性的信号。每次出现新信号时,我都会设置对象(信号)的一些属性并将其添加到集合中,信号可以出现多次。对于信号,我维护一个列表,其中存储信号名称,当信号到来时,我检查信号是否在列表中,如果不在列表中,我只需将一个新对象添加到我的集合中,但如果信号是在列表中,我从集合中获取该信号并修改其一些属性,删除该信号并添加一个新信号。

问题是,当我的信号第二次或第三次出现时,它不会删除旧信号并保留所有出现的具有修改属性的相同信号。

这是我的代码

 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代码(我是第一次使用Tree Set,所以不确定如何实现我的comapreTo)

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

任何帮助将不胜感激...

提前致谢

最佳答案

如果问题只是删除旧信号,您可以使用以下命令删除它:

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);
}
}

关于java - 删除一个对象并在 TreeSet 中添加另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18962445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com