2015-11-06 222 views
0

我正在創建一個服務,該服務返回來自XML提要的文章列表。我試圖找到更好的方式來更新當前存儲在我的程序中的文章列表,無論客戶端代碼何時需要更新。向另一個列表中的列表添加唯一元素

我有一個名爲articleHistory的變量,這是我想要更新的文章列表。我有新的文章列表,恰當地命名爲newArticles,我的文章檢索功能返回。這兩個列表中都會有文章。但新文章列表將包含不在文章歷史列表中的文章。我正在使用一個臨時變量,將newArticles附加到articleHistory,然後在調用distinct方法後返回該變量。

def updateArticleHistory: List[Article] = { 
    val newArticles = getArticles 
    val temp = newArticles ::: articleHistory 
    articleHistory = temp.distinct 
} 

假設有一個案例類名稱文章可用。我覺得必須有更好的方法來做到這一點,但我無法弄清楚。

+3

考慮使用'Set'數據結構,與'List'相比,保證了元素的唯一性。 – Rumoku

+0

您的列表是否已分類?如果不是,它的項目順序重要嗎? –

+0

@VladimirKorenev不,訂單並不重要。 – redeagle47

回答

1

好像你想要的是ListSet。 A ListSetSet(因爲它只允許每個元素中的一個),但是維護插入順序。奇怪的是,因爲它在頭部插入元素,所以列表是向後的。

import collection.immutable.ListSet 
val a = ListSet.empty[Int] 
val b = a ++ List(3,4,5)  // ListSet(5, 4, 3) 
val c = b ++ List(1,2,3,4,5,6) // ListSet(6, 2, 1, 5, 4, 3) 
c.toList.reverse // List(3, 4, 5, 1, 2, 6) 
1

我不知道,但爲什麼你不能這樣做水木清華這樣的:

val lstA: List[Int] = List[Int](1, 2, 3, 4) 
val lstB: List[Int] = List[Int](5, 6, 7, 1, 2) 

println(lstA ::: lstB distinct) 

>> List(1, 2, 3, 4, 5, 6, 7) 

我認爲這是很好:)

+0

這就是我現在正在做的事情。我試圖找到一個更好的解決方案,如果有的話。然而,這是一個更簡潔的方法,所以非常感謝。 – redeagle47

相關問題