2015-11-06 179 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

相关问题