我有一个带有以下元素的scala List[List[Person]]
:
Person(Antonio)
Person(Maria)
Person(Joao)
Person(Antonio)
Person(Susana)
Person(Laura)
Person(Maria)
Person(Manuel)
Person(Joao)
Person(Laura)
如何获取列表,其中每个列表的第一个元素不重复?像这样:
Person(Antonio)
Person(Susana)
Person(Maria)
使用var's
会很容易,但我想在功能上做到这一点。
答案 0 :(得分:2)
val l: List[List[Person]] = ...
l.foldLeft(List.empty[Person]) { case (acc, el) =>
el.find(x => !acc.contains(x)).fold(acc)(acc.::)
}
答案 1 :(得分:0)
我能够通过递归和foldLeft
:
val allLists: List[List[Person]] = ...
allLists.foldLeft(List.empty[Person]){ case(outputList, list) =>
def loop(innerList: List[Person], newPerson: Person): Person = {
if(innerList.isEmpty) newPerson
else if(!outputList.contains(innerList.head)) newPerson
else loop(innerList.tail, innerList.tail.head)
}
outputList :+ loop(list, list.head)
}