当前位置: 首页 > 知识库问答 >
问题:

Scala遍历map,将单例列表变成单例列表

席宜修
2023-03-14

我试图将List[T]类型的值提取为映射中的T。例如:

val c = Map(1->List(1), 2-> List(2), 3->List(3));

会变成

Map(1->1,2->2,3->3);

以下是我到目前为止所写的内容:

val Some(values) = request.body.asFormUrlEncoded.foreach {
  case (key,value) =>
    Map(key->value.head);  
};

这是我收到的错误:

constructor cannot be instantiated to expected type; found : (T1, T2) required: scala.collection.immutable.Map[String,Seq[String]]

编辑:该行出现以下错误:

case (key,value) =>

EDIT2:request.body。asFormUrlEncoded示例输出

Some(Map(test -> List(324)))
Some(Map(SpO2 -> List(456), ETCO2 -> List(123)))

共有1个答案

云项禹
2023-03-14

您确定列表中始终只有一个元素吗?如果是这样的话,您应该这样做,这一点很清楚,并且有一个好处,即如果您意外地得到一个坏列表(没有一个元素),它将抛出一个错误。

c.map { case (k, List(v)) => k -> v }
// Map(1 -> 1, 2 -> 2, 3 -> 3)

如果您的列表可以有多个元素,并且您只想要第一个,您可以这样做(这将在空列表上出错):

val d = Map(1 -> List(1), 2 -> List(2,4,6), 3 -> List(3))
d.map { case (k, List(v, _*)) => k -> v }
// Map(1 -> 1, 2 -> 2, 3 -> 3)

如果您的列表可能不只有一个元素,并且您希望忽略任何非单例列表而不是抛出错误,请使用< code>collect而不是< code>map:

val e = Map(1 -> List(1), 2 -> List(2,4,6), 3 -> List(3), 4 -> List())
e.collect { case (k, List(v)) => k -> v }
// Map(1 -> 1, 3 -> 3)

至于你的代码:

val Some(values) = request.body.asFormUrlEncoded.foreach {
  case (key,value) =>
    Map(key->value.head);  
};

这真的没有任何意义。

首先,foreach不返回任何内容,因此将其结果赋给变量将永远不起作用。您可能希望这是一个映射,以便它返回一个集合。

其次,您对一些的使用使您看起来不理解Options,因此您可能需要阅读它。

第三,如果希望结果是一个映射(成对的集合),那么只需返回成对的<code>键即可-

第四,如果您在< code>case (key,value)上得到错误匹配,那么< code>asFormUrlEncoded可能实际上并不返回一个对集合。您应该看到它的实际类型。

最后,分号是不必要的。你应该移除它们。

根据您的评论进行编辑:

因为<code>是request.body。asFormUrlEncoded实际上返回了类似于<code>的东西,比如一些(Map)(“test”-

如果asFormUrlEncoded可能返回None,并且您没有任何方法来处理该问题,那么您应该防范它:

val a = Some(Map("test" -> List(324)))
val value = a match {
  case Some(m) => m.collect { case (k, List(v)) => k -> v }
  case None => sys.error("expected something, got nothing")
}

如果您确定asFormUrlEncoded已经返回了部分,那么您可以这样做:

val a = Some(Map("test" -> List(324)))
val Some(value) = a.map(_.collect { case (k, List(v)) => k -> v })
 类似资料:
  • 我对POI还是新手,但是我想简单地在Excel工作簿中迭代一列。例如,在下表中,如果我只想要列A的值,即列0中的行0-3,有没有有效的方法来做到这一点?我所看到的所有POI都是基于行的。 我有一些大的电子表格,我可以成功地遍历整个表格,但我只是想找出处理这种事情的最佳实践。 提前感谢。

  • 本文向大家介绍js遍历map javaScript遍历map的简单实现,包括了js遍历map javaScript遍历map的简单实现的使用技巧和注意事项,需要的朋友参考一下 js遍历map javaScript遍历map的简单实现 这样会把map给遍历掉,显示在浏览器上的控制器里。 以上这篇js遍历map javaScript遍历map的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参

  • 输入是一个列表列表。请看下面。文件名是一个列表,包含的名称与列表中的列表数量相同(,,) 每个名称都附加到路径中:-- 程序在遍历列表时遍历包含路径的列表,并打印路径及其文件名。我希望输出是--。然而,我得到了下面的输出。请查看输入后的输出 输入 输出 我希望输出是-- 然而,我得到的结果如下: 我无法理解为什么在遍历列表时不能使用文件名遍历路径列表。我希望这有助于澄清问题。有人能帮忙吗? 我已经

  • 本文向大家介绍python遍历路径破解表单的示例,包括了python遍历路径破解表单的示例的使用技巧和注意事项,需要的朋友参考一下 首先是利用python遍历路径,采用字典爆破的形式,当然如果只是单纯的爆破路径,简单写一个多线程脚本就行了。这里考虑如何对爆破到的路径进行第二步利用,此处尝试对猜解到的路径进行表单发现及登陆爆破处理。 ​首先就是路径爆破,采用多线程队列,爆破路径,判断形式为200响应

  • 问题内容: 我有以下对象和地图: 我想将地图转换成另一个地图。结果图的键是输入图的键。结果映射的值是My对象的属性“名称”,按优先级排序。 该 排序 和提取的名字是没有问题的,但我不能把它放到结果地图。我使用旧的Java 7方法进行操作,但是可以使用流API会很好。 有人知道吗?我试过了,但是被卡住了: 问题答案: 本质上,您将流式传输每个条目集并将其收集到新映射中。要计算新地图中的值,请从旧地图

  • 问题内容: 我想要一种算法来遍历列表切片。切片大小在功能之外设置,可以不同。 在我看来,这就像: 有没有一种使用python 2.5正确定义的方法或其他方法? edit1:澄清 “分区”和“滑动窗口”这两个术语听起来都适用于我的任务,但是我不是专家。因此,我将更深入地解释该问题并添加到问题中: FatherList是我从文件中获取的一个多级numpy.array。函数必须找到序列的平均值(用户提供