Переопределить метод добавления для LoopingListIterator - PullRequest
0 голосов
/ 30 марта 2020

Итак, прежде чем я пришел сюда, чтобы попросить вас, ребята, о помощи, я действительно искал здесь, в сообществе, возможные возможные вопросы по моей проблеме, но мне не повезло. Ну, я использую LoopingListIterator, который расширяет ListIterator и implements List interface. Я хочу добавить объект в свой список (из LoopingListIterator) и мне нужно сравнить элемент, который я добавляю, с теми элементами, которые уже есть в списке, этот «компаратор» сравнивает двойные значения моего объекта.

Объект имеет 4 атрибута, (Obj key, int, double spx, int) моего класса "TestEvent<T>". В этом классе у меня есть CompareTo, равно и hashCode. Это key из Obj, является значением int. Так что это мой **compareTo of TestEvent<T> class**. Здесь элементы сортируются в соответствии с этими двойными значениями в порядке убывания.

public class TestEvent<T> implements Comparable<TestEvent<T>>
{


    public TestEvent(Obj obj, int p, double spx, int pos)
    {
      this.obj = obj;       
      this.p = p;
      this.spx = spx;
      this.pos = obj.pos;
    }
    public int compareTo (TestEvent<T> te )
     {
         if(spx > te.spx)
         {
             return -1;
         }
         else if (spx < te.spx)
         {
             return 1;
         } 
         else 
         {
             return (obj.key > te.obj.key) ? 1 : ((obj.key < te.obj.key) ? -1 : 0); 
         }
     } 
}

У меня есть другой класс, TestLinkedList<T>, который extends the LoopingListIterator, Override метод add. OBS: Я знаю, что мой метод add неправильный, нужна помощь, чтобы добавить элементы в соответствии с spx values, , сравнивающими элементы.

public class TestLinkedList<T> extends LoopingListIterator<TestEvent<T>>
{
    public List<TestEvent<T>> listTestEvent = new LinkedList<TestEvent<T>>();

    public TestLinkedList (List<TestEvent<T>> e_LinkedList)
    {
        super(e_LinkedList);
    }

    @Override
    public void add (TestEvent<T> pe)
    {
        ListIterator< TestEvent <T>> listItr = listTestEvent.listIterator();

        while(listItr.hasNext())
        {
            TestEvent <T> Event = listItr.next();

            if(pe.spx > testEvent.spx)
            {
                continue;
            }
            else if(pe.spx < testEvent.spx )
            {
                super.add(pe);
            }
        }
    }
}

В моем основном классе я создаю объект TestLinkedList<T> class, который я передаю в качестве аргумента, список (созданный с помощью LoopingListIterator). Я хочу переопределить метод add , поэтому, когда я перебираю список и добавляю объект, это должно быть сделано путем сравнения spx values.

My основной класс:

public class MainClass<T>
{
       protected TestLinkedList<T> testEventLinkedList;
       protected List<TestEvent<T>> E_LinkedList;

       public void execute()
       {
          E_LinkedList = new LinkedList<TestEvent<T>>();

          // there's a loop here to add objects in the linked list 

             E_LinkedList.add(testEvent);

          // end loop

           testEventLinkedList = new TestLinkedList <T>(E_LinkedList);
           testEventLinkedList. listTestEvent.addAll(E_LinkedList);

           while(testEventLinkedList.hasNext())
           {
              TestEvent<T> test = testEventLinkedList.next();
              testEventLinkedList.remove();

              // I need this object here, added on my list sorted by the **spx value**
              // thus, probably, this new object will be added at the end of the list, according to the spx value.

              testEventLinkedList.add (new TestEvent<T>(test.obj, test.p, spx, pos));
           }
      }
}
...