scala - 左连接两个列表

标签 scala list

我想左连接两个列表,而不丢失数据。下面的例子:

// two lists
val b = List("John","Alice","Gregor","Mike")                 // base list
val l = List((List(1,2,3),"Mike"), (List(3,1,2), "Alice"))  // list to left join

// sorted
val bs = b.sorted        // List("Alice","Gregor","John","Mike")
val ls = l.sortBy(_._2)  // List((List(3,1,2), "Alice"),(List(1,2,3),"Mike"))


// left join - expected result:
// Alice and Mike found in both lists, Gregor and John appear only in the base list
// List(("Alice",(List(3,1,2),"Alice"), ("Gregor",Nil), ("John",Nil), ("Mike",List("Alice","Gregor","John","Mike"))))

我找到了一些方法,但它们似乎不适合我:
- zip - 简单的“复制/粘贴”两个列表,
- flatMap - 删除没有出现在两个列表中的元素。

先感谢您。

最佳答案

尝试

b
  .map(key => key -> l.find(_._2 == key))
  .map {case (key, value) => key -> value.getOrElse(Nil) }

哪个输出
List((John,List()), (Alice,(List(3, 1, 2),Alice)), (Gregor,List()), (Mike,(List(1, 2, 3),Mike))

关于scala - 左连接两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736288/

相关文章:

java - gmock 可以模拟 Java 类的静态方法吗?选择?

scala - 这个功能可以用 Haskell 的类型系统实现吗?

r - 将两个列表按组件合并为一个组件

list - NoSuchMethodError:将值添加到列表时,在空值上调用了 'add'方法Flutter

java - mysql 在 playframework 的子句中查询

scala - 如何从列表中随机选择一定数量的元素

scala - Stream Continually 只读取 1 分钟

c# - .NET 中不同线程之间共享的列表

python - 将 ElementTree findall() 转换为列表

python - 使用带有包含数字/空格的参数的 ols 函数