如何使用scala对列表进行排序和合并?

时间:2014-09-19 06:20:44

标签: scala sorting merge

我有两个不同的列表,其中包含不同的数据。 这是一个列表的例子 -

list1:[{"name":"name1","srno":"srno1"},{"name":"name2","srno":"srno2"}]
list2:[{"location":"location1","srno":"srno2"},{"location":"location2","srno":"srno1"}]

这两个列表有一个共同点,即#srno'这是字符串类型。 我想在srno上映射列表并合并这两个列表,以便对应于' srno:1'从list1到' srno:1' to list2。

所以文件列表会是这样的:

[{"name":"name1","srno":"srno1","location":"location2"},{"name":"name2","srno":"srno2","location":"location2"}]

如何使用scala对这两个列表进行排序和合并以形成单个列表?

修改 将存在一对一的对应关系,即srno1将在两个列表中仅出现一次

1 个答案:

答案 0 :(得分:1)

假设您正在将json转换为案例类,您可以使用理解来执行此操作。

case class NameSrno(name: String, srno: String)
case class SrnoLoc(srno: String, location: String)
case class All(name: String, srno: String, location: String)

def merge(nsl: List[NameSrno], sll: List[SrnoLoc]): List[All] = {
  for {
    ns <- nsl
    sl <- sll
    if (ns.srno == sl.srno)
  } yield All(ns.name, ns.srno, sl.location)
}

用法:

val nsl = List(NameSrno("item1", "1"), NameSrno("item2", "2"))
val sll = List(SrnoLoc("1", "London"), SrnoLoc("2", "Tokyo"))

 merge(nsl, sll)
//> res0: List[test.SeqOps.All] = List(All(item1,1,London), All(item2,2,Tokyo))