地图列表中的计算

时间:2016-11-30 19:35:37

标签: java scala list

我有多个列表存储如下:

Data1 -> 2,100
Data2 -> 5,300

到目前为止,我有能力将这些插入到txt文件中并再次读出它们。但是我不知道如何进行计算,以便显示第一个值乘以第二个值。这就是我想要的:

Data1 -> 200 
Data2 -> 1500

我以为我可以修改下面的代码(删除不相关的代码)mapdata2存储为Map(String, List[Int])

  val mapdata2 = readFile("newDataFile.txt")

  //11 view newly created stocks
  def handleEleven(): Boolean = {
    mnuShowPoints(currentStockFor2)
    true
  }
  def mnuShowPoints(stock:() => Map[String,List[Int]]) = {
    stock() foreach {case (x,y) => println(s"$x: $y")}
  }
  // sort map by value in descending order -
  def currentStockFor2():Map[String,List[Int]] = {
    ListMap(mapdata2.toSeq.sortWith(_._1 < _._1):_*)
  }

我不知道如何处理这个问题,我尝试过:

ListMap(mapdata2.map(x=>x*x)

认为这可能会将第一个值乘以另一个值,但事实并非如此。我需要更好地了解它是如何工作的。我不明白该怎么做,所以我尝试了一些方法,直到找到有用的方法。我不是在找人为我做这项工作,只是帮助我理解。感谢

1 个答案:

答案 0 :(得分:0)

如果您尝试映射Map中的值,可以执行以下操作:

scala> val myMap = Map("Data1" -> (2,100), "Data2" -> (3,500))
myMap: scala.collection.immutable.Map[String,(Int, Int)] = Map(Data1 -> (2,100), Data2 -> (3,500))

scala> val newMap = myMap.mapValues(x => x._1 * x._2)
newMap: scala.collection.immutable.Map[String,Int] = Map(Data1 -> 200, Data2 -> 1500)

或者,如果您想在地图中使用List,则可以执行以下操作:

scala> val myMap = Map("Data1" -> List(2,100), "Data2" -> List(3,500, 10))
myMap: scala.collection.immutable.Map[String,List[Int]] = Map(Data1 -> List(2, 100), Data2 -> List(3, 500, 10))

scala> val newMap = myMap.mapValues(_.reduce(_*_))
newMap: scala.collection.immutable.Map[String,Int] = Map(Data1 -> 200, Data2 -> 15000)