2014-07-11 47 views
0

我ReportItem對象2所列出:結合對特定對象的兩個列表屬性

tcItems [ReportItem [date=2014-07-11 08:00:00.000,operator=Vodafone,country=Irl,blocked=1,total=1,uniqTriggeredCount=1,], ReportItem [date=2014-07-11 08:00:00.000,operator=TMob,country=UK,blocked=2,total=4,uniqTriggeredCount=3,]] 
fcItems [ReportItem [date=2014-07-11 08:00:00.000,filterid=1,country=Irl,operator=Vodafone,triggered=0,blocked=0,analysis=3,], ReportItem [date=2014-07-11 08:00:00.000,filterid=1,country=UK,operator=TMob,triggered=0,blocked=5,analysis=0,], ReportItem [date=2014-07-11 08:00:00.000,filterid=2,country=UK,operator=TMob,triggered=0,blocked=4,analysis=0,]] 

我要創建兩個列表,使得tcItems任何reportItem具有相同的日期,國家一個新的列表並且operator作爲fcItems中的reportItem在新列表中獲取具有這兩者的組合屬性的reportItem對象。在上面的例子中,我想:

newReportItems [ReportItem [date=2014-07-11 08:00:00.000,operator=Vodafone,country=Irl,blocked=1,total=1,uniqTriggeredCount=1,[filterid=1,triggered=0,blocked=0,analysis=3],], ReportItem [date=2014-07-11 08:00:00.000,operator=TMob,country=UK,blocked=2,total=4,uniqTriggeredCount=3,[filterid=1,triggered=0,blocked=5,analysis=0],[filterid=2,triggered=0,blocked=4,analysis=0],] 

注意fcItems可以有多個filterIds,triggereds,blockeds與分析工作。

我看過,但無法找到合併這兩個對象列表的方法。請幫助

+0

ohhh請格式化您的問題。這很難閱讀 –

回答

1

您需要兩個步驟:當具有相同的日期,國家和運營商的另一個ReportItem相比

1)覆蓋ReportItemequals方法返回true。

@Override 
public boolean equals(Object o) { 
    if (o instanceof ReportItem) { 
     ReportItem ri = (ReportItem) o; 
     if (this.getDate().equals(ri.getDate()) && ... // compare other attributes) { 
      return true; 
     } 
    } 
    return false; 
} 

1b)中如果不能修改ReportItem,寫一個Comparator<ReportItem>這在其匹配ReportItems compare方法返回0。

2)遍歷tcItems併爲每個項檢查它是否包含在fcItems中(使用等於或比較器)。如果是,採取既ReportItems並結合他們,你想

for (ReportItem ri : tcItems) { 
    ReportItem matchingRI = findMatchingRI(ri); 
    if (matchingRI != null) { 
     // merge 
    } 
} 

private ReportItem findMatchingRI(ReportItem ri) { 
    for (ReportItem fcItem : fcItems) { 
     if (fcItem.equals(ri)) 
      return fcItem; 
    } 
    return null; 
} 

現在你也可以使用Java 8的流API與過濾器/集,但我不會去到有關細節。

相關問題