2013-08-08 1 views
0

У меня есть очередь элементов, отсортированных по дате. Мне нужно извлечь первые n элементов, которые имеют одну и ту же дату, и добавить их во временный ArrayList, из которого я выбираю один из них и оставляю остальные. После этого мне нужно продолжать делать то же самое для следующих n элементов очереди с той же датой (извлечь их в список temp и т. Д.), Пока у меня не будет больше элементов в очереди.Сравнение последовательных элементов в очереди

 // some notes to help you understand the code 
     PriorityQueue<Results> r, size(4), elementsEqualByTime(1=2,3=4); 
     List<Comments> c, size(2); 
     ArrayList temp; 

     if (c.size() != r.size() && resultIter.hasNext()) { 
     //first iteration will compare element 0 to itself -> 100% true 
      ResultObject r2 = resultIter.next(); 
      ResultObject r1 = r2; 

     while (resultIter.hasNext() && r1.getTime().equals(r2.getTime())) { 
      temp.add(r1); 
      //we add the matching elements before we continue 
      r1 = r2; 
      temp.add(r1); 
       if (resultIter.hasNext()) { 
      //after we add the 2 matching elements we continue 
        r2 = resultIter.next(); 
       } 
      } 
      //use the items in temp 
        temp.clear(); 
     } 

Сейчас он работает на 1-й набор элементов, но на 2-й итерации не добавляет элементы в темп ArrayList. Я был бы признателен за помощь в этом решении, но я также могу предложить различные предложения.

ответ

0
while (commentIter.hasNext()) { 

     Comment c1 = null; 

     temp.add(arrayQueue[0]); 
     for (int i = 1; i < arrayQueue.length; i++) { 
      if (!arrayQueue[i].getTime().equals(arrayQueue[i - 1].getTime())) { 

       c1 = commentIter.next(); 
       //do stuff with the results     
       temp = new HashSet<ResultObject>(); 

      } 
      temp.add(arrayQueue[i]); 
     } 

     if (!temp.isEmpty()) { 

      c1 = commentIter.next(); 
      //do stuff with the results 
     } 
     temp = new HashSet<ResultObject>(); 
    } 

Это проверенное решение, которое работает.

0
boolean Check (List<Element> elements,Element element) 
    { 
     for(Element element1:elements) 
      if(element1.equals(element)) 
       return true; 
     return false; 
    } 
    void Stuff() 
{ 

    // some notes to help you understand the code 
    PriorityQueue<Element> r = new PriorityQueue<Element>(); 
    List<Element> c; 
    List<Element> temp = new ArrayList<Element>(); 

    for(Element element:r) 
    { 
      if(!Check(temp, element)) 
      { 
       // do stuff with temp 
       temp = new ArrayList<Element>(); 
      } 
      temp.add(element); 
     } 
}