如何在scala中reduceLeft一个List of Any类型

时间:2017-07-19 06:06:17

标签: scala

我有一张

的地图
val m = Map(1 -> David, 2 -> Fred, 3 -> Bob, 4 -> Martin)

我希望根据密钥获取值。我试过了

p.map { case (k,v) => if (k == 1) v }

我得到一个List [Any]。但我希望字符串中的值。所以我尝试了reduceLeft。

p.map { case (k,v) => if (k == 1) v }.toList.reduceLeft((a,b) => if (a.length > b.length) a else b )

我是否需要将其转换为String列表?或者我如何最好地将值作为字符串。

2 个答案:

答案 0 :(得分:2)

为什么这里需要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.")

答案 1 :(得分:0)

  

我想根据密钥获得一个值。

你得到一个List[Any],因为如果密钥不等于1会怎样?您没有else子句,因此编译器可以解析最常用的类型Any

一般而言,这不是您使用Map的方式。映射包含键值对,其中键用于查找值。查询是通过get方法完成的,该方法返回Option[T]

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