List 需要将scala中的两个列表与替换条件结合起来

List 需要将scala中的两个列表与替换条件结合起来,list,scala,List,Scala,我想这样做: val list1 = List(Student("ivan","history",45)) val list2 = List(Student("ivan","history",40),Student("alexander","physics",81),Student("vlad","math",70)) 我想结合lis

我想这样做:

val list1 = List(Student("ivan","history",45))

val list2 = List(Student("ivan","history",40),Student("alexander","physics",81),Student("vlad","math",70))
我想结合list1和list2,以便list1的元素根据学生姓名和科目删除list的2元素

所需输出:

List(Student("ivan","history",45),Student("alexander","physics",81),Student("vlad","math",70))

您可以定义一个函数来检查两个学生值是否匹配:

def isSame(s: Student, t: Student): Boolean = (s.name == t.name && s.sub == t.sub)
使用此选项,您可以迭代
list2
,并检查
list1
中是否存在匹配项。如果存在,则使用列表1中的值,否则保留列表2中的值

list2.map(s2 => (list1.map(s1 => if (isSame(s1, s2)) s1 else s2))).flatten

请注意,如果这两个列表很大,这可能不是最佳的解决方案。

我在这里选择一个
groupBy
。将这两个列表连接起来,然后使用
groupBy
并获取每个键的head元素。这将在学生中筛选顺序,但效率很高

(列表1++列表2)
.groupBy(s=>(s.name,s.subject))
.map{大小写(键,值)=>
头
}

请将您编写的代码添加到当前输出中,好吗。因为在这里,你只是要求我们做你的家庭作业,因为这看起来像是一个家庭作业,如果你能告诉我们你是否有任何限制,那就好了。例如,您只能使用列表(而不是任何其他数据结构),或者如果必须使用递归或其他方法来实现它。另外,请,请,包括您迄今为止尝试过的代码。