簡體   English   中英

從Java List中移除依賴於n + 1個元素的元素n

[英]Remove element n from Java List dependent on n + 1 element

我想用列表而不是數組來實現以下目的(根據數組中相鄰元素之間的比較刪除一些元素)

Interval: {
  start,
  end,
  priority;
}

    Interval[] intervals = someIntervalsSortedByStartTime();//[(1,5), (4, 5)]
    for(int i=0; i<intervals.length-1; i++){
    if(intervals[i] == null) continue;
    if((intervals[i].end > intervals[i+1].start) ){
        if(intervals[i].priority < intervals[i+1].priority){
          intervals[i] = null //i.e. have the element removed.
        }else if(intervals[i].priority > intervals[i+1].priority{
          itervals[i+1] = null;
        }else{
         throw new WTFException();
        }
    }
}

我知道對於集合而言,我們需要使用Iterator,ListIterator,Apache collections Iteration或Google Collections Iterator有點不同。 從列表中刪除一個項目。

ListIterator,Apache和Google具有.previous或.peek方法,可以使用一些允許for循環示例中所示的“向前看”功能的方法。 但是,如果您在.remove()之前最后調用.previous或.peek時,除了.remove()之外還使用它們,則前一個項目將被刪除,並且沒有一種方法可以指定.remove(index),您必須調用。在某些情況下,使用next()。next並設法返回到每次迭代后希望迭代器位於的位置。

在這種情況下,Steam無法正常工作,因為我們無法基於列表中的其他元素進行過濾,即我們無法在Steam中獲得“下一個”。

我還想避免對數據進行臨時復制,然后再刪除數據。

實現所需功能的最佳方法是什么?

您可以像數組一樣使用List,創建循環並使用get(int index)和remove(int index)方法訪問/刪除列表中的Elements。 刪除元素時,只需跟蹤索引。 為避免這種情況,您可以從列表的末尾開始,然后從頭開始:

for (int i=intervals.length-1; i>=0; i--)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM