Элемент Java Observable List удаляется при обновлении по теме
Я пишу код, в котором наблюдаемый список A обновляется отдельным потоком, и когда новый элемент обновляется в этом списке, слушатель отправляет этот же элемент в другой список (список вызовов B) для дальнейшего расчета. Предположим, что в этом списке B взять 5 элементов, выполнить вычисления, а затем удалить старые элементы и выбрать новые элементы из списка A. В настоящее время мой код при удалении элемента из списка B также удаляет тот же элемент из списка A, который мне не нужен, и список B все еще имеет один предыдущий элемент. Любая помощь будет оценена.
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
public class Window_Demo1 implements Runnable {
/**
* @param args
*/
public static ObservableList<Integer> lstA = FXCollections.observableList(new ArrayList<Integer>());
public static List<Integer> win = new ArrayList<>();
public static void main(String[] args) {
// TODO Auto-generated method stub
Window_Demo1 demo = new Window_Demo1();
Thread thread = new Thread(demo);
thread.start();
addtolstB(lstA,win);
}
public static void addtolstB(ObservableList<? extends Integer> items, List<Integer> lstB) {
items.addListener((ListChangeListener<Integer>) c-> {
while (c.next()) {
if (c.wasAdded()) {
lstB.addAll(c.getAddedSubList());
System.out.println(lstB.toString()+ "Lst B Added: "+ Instant.now().getEpochSecond());
if(lstB.size()==5) {
items.removeAll(lstB);
}
}
if (c.wasRemoved()) {
lstB.removeAll(c.getRemoved());
System.out.println(lstB.toString());
}
}
});
for (Integer item : items) {
lstB.add(item);
}
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i <= 100; i++) {
lstA.add(i);
System.out.println(lstA.toString()+ "Publisher Added: "+i+" at time: "+Instant.now().getEpochSecond());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}