仅将唯一元素添加到另一个列表中的列表

时间:2015-11-06 22:51:22

标签: list scala data-structures

我正在创建一个服务,该服务返回XML Feed中的文章列表。我试图找到一种更好的方法来更新当前存储在我的程序中的文章列表,只要客户端代码要求更新。

我有一个名为articleHistory的变量,它是我想要更新的文章列表。我有一个新的文章列表,恰当地命名为newArticles,我的文章检索函数返回。两个清单中都会有文章。但是newArticles列表将包含文章列表中没有的文章。我目前正在使用临时变量,将newArticles附加到articleHistory,然后在调用distinct方法后返回它。

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

假设有一个案例类名称文章可用。我觉得必须有更好的方法来做到这一点,但我无法弄清楚。

2 个答案:

答案 0 :(得分: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)

我认为这很好:)

答案 1 :(得分:1)

看起来你想要的是ListSetListSetSet(因为它只允许每个元素中的一个),但保持插入顺序。一个奇怪的事情是,因为它在头部插入元素,所以列表是向后的。

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)