我有如下列表-
val tpList = List((1,"Sachin",2),(2,"Rahul",3.50),(3,"dravid",5.75),(4,"kohli",4.56),(5,"dhoni",7.50))
我要从中提取每个元组,如果等级大于5,则将等级乘以.5。
有人可以告诉我如何实现这一目标
这里(1,"Sachin,2)---(rownum,name,rating)
-
答案 0 :(得分:1)
下面应该可以工作
val tpList: List[(Int, String, Double)] = List((1,"Sachin",2),(2,"Rahul",3.50),(3,"dravid",5.75),(4,"kohli",4.56),(5,"dhoni",7.50))
你可以做地图
println(tpList.map(x => x.copy(_3 = if (x._3 > 5) x._3 * 0.5 else x._3)))
或者您可以使用collect
println(tpList.collect { case (x,y, z) => (x,y, if (z >5) z* 0.5 else z)} )
答案 1 :(得分:1)
您可以这样操作(据我了解,其评分<= 5的所有项目都应保持不变):
val tpList: List[(Int,String,Double)] = List((1,"Sachin",2),(2,"Rahul",3.50),(3,"dravid",5.75),(4,"kohli",4.56),(5,"dhoni",7.50))
val result = tpList.map{
case (x,y,rating) if (rating > 5) => (x,y,rating*0.5)
case rest => rest
}
// result = List((1,Sachin,2), (2,Rahul,3.5), (3,dravid,2.875), (4,kohli,4.56), (5,dhoni,3.75))
答案 2 :(得分:0)
您需要先使用过滤器,然后再进行映射。
val data:List[(Int, String, Double)] = List((1,"Sachin",2),(2,"Rahul",3.50),(3,"dravid",5.75),(4,"kohli",4.56),(5,"dhoni",7.50))
val filterdata = data.filter(_._3 > 5).map(x => (x._1,x._2,x._3*0.5))
print(filterdata) /* output: List((3,dravid,11.5), (5,dhoni,15.0)) */