Элемент 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();
   }

  }

 
  
 }

}

Проблема в этом коде:

0 ответов

Другие вопросы по тегам