根据条件获取列表中的更新元组值

时间:2019-10-05 10:45:20

标签: scala

我有如下列表-

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)-

3 个答案:

答案 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)) */