0

我有一个按日期排序的元素队列。我需要提取具有相同日期的前 n 个元素并将它们添加到临时 ArrayList 中,从中选择其中一个并废弃其他元素。之后,我需要继续对队列中具有相同日期的下 n 个元素执行相同的操作(将它们提取到临时列表等),直到队列中没有更多项目。

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

现在它适用于第一组元素,但在第二次迭代中,它不会向 temp ArrayList 添加任何元素。我很感激这个解决方案的帮助,但我也愿意接受不同的建议。

4

2 回答 2

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);
        } 
}
于 2013-08-08T12:45:23.993 回答
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>();
    }

这是一个经过测试的有效解决方案。

于 2013-08-09T15:30:45.267 回答