Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何简化scala中任何类型的列表_Scala - Fatal编程技术网

如何简化scala中任何类型的列表

如何简化scala中任何类型的列表,scala,Scala,我有一张地图 val m = Map(1 -> David, 2 -> Fred, 3 -> Bob, 4 -> Martin) 我想得到一个基于键的值。我试过了 p.map { case (k,v) => if (k == 1) v } 我有一张清单[任何]。但是我想要一个字符串中的值。所以我试着这样还原 p.map { case (k,v) => if (k == 1) v }.toList.reduceLeft((a,b) => if (a.l

我有一张地图

val m = Map(1 -> David, 2 -> Fred, 3 -> Bob, 4 -> Martin)
我想得到一个基于键的值。我试过了

p.map { case (k,v) => if (k == 1) v }
我有一张清单[任何]。但是我想要一个字符串中的值。所以我试着这样还原

p.map { case (k,v) => if (k == 1) v }.toList.reduceLeft((a,b) => if (a.length > b.length) a else b )
我需要将其转换为字符串列表吗?或者如何最好地获得字符串形式的值

我想得到一个基于键的值

您会得到一个
列表[Any]
,因为如果键不等于
1
,会发生什么?您没有
else
子句,因此编译器可以解析最通用的类型,
Any

一般来说,这不是使用
地图的方式。映射包含键-值对,其中键用于查找值。查找通过
get
方法完成,该方法返回一个
选项[T]

val one: Option[String] = map.get(1)
one.foreach(str => println(str))

为什么您需要在这里使用
reduceLeft

如果要根据键使用从映射中获取值

m.getOrElse(key, default)
// where key is the numeric value in your case; Map[Int, String]
// and default will be the value returned if you don't find 
// any key
比如说,

m.getOrElse(1, "David not found.")