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 使用flatmap过滤和计算集合中的值_Scala - Fatal编程技术网

Scala 使用flatmap过滤和计算集合中的值

Scala 使用flatmap过滤和计算集合中的值,scala,Scala,我正在寻找一种惯用的方法: val list = Seq(1, 2, 3, 4, 5, 6, 7) list.flatMap(i => if (i % 2 == 0) Some(i * 2) else None) list.flatMap(i => if (i % 2 == 0) (i * 2) :: Nil else Nil) 两种方法都能得到预期的结果,我不确定哪种方法更好。谢谢你的时间 编辑: 我知道list.filter%2==0.map*2适合这种简单的情况,但我的实际情

我正在寻找一种惯用的方法:

val list = Seq(1, 2, 3, 4, 5, 6, 7)
list.flatMap(i => if (i % 2 == 0) Some(i * 2) else None)
list.flatMap(i => if (i % 2 == 0) (i * 2) :: Nil else Nil)
两种方法都能得到预期的结果,我不确定哪种方法更好。谢谢你的时间

编辑:


我知道list.filter%2==0.map*2适合这种简单的情况,但我的实际情况很复杂,filter有多个可接受的条件,每个条件都有自己的筛选元素句柄函数。

对于多个筛选条件和相关计算,您可以尝试类似的方法

  val list = Seq(1, 2, 3, 4, 5, 6, 7) 

  list.collect {
    case i if (i % 2 == 0) => i * 2
    case i if (i % 3 == 0) => i * 3
    case i if (i % 5 == 0) => i * 5
  }                   //> res0: Seq[Int] = List(4, 9, 8, 25, 12)

如果需要对不匹配的元素执行某些操作,可以添加默认情况。如果这样做,您最好使用map而不是collect,因为case语句中的函数不再是分部函数。

对于多个过滤条件和相关计算,您可以尝试类似的方法

  val list = Seq(1, 2, 3, 4, 5, 6, 7) 

  list.collect {
    case i if (i % 2 == 0) => i * 2
    case i if (i % 3 == 0) => i * 3
    case i if (i % 5 == 0) => i * 5
  }                   //> res0: Seq[Int] = List(4, 9, 8, 25, 12)
如果需要对不匹配的元素执行某些操作,可以添加默认情况。如果您这样做,您最好使用map而不是collect,因为case语句的函数不再是分部函数。

惯用方法是list.filter%2==0Seq1,2,3,4,5,6,7.filter%2!=0.map_*2?惯用方式是list.filter_%2==0Seq1、2、3、4、5、6、7.filter_%2!=0.0地图*2?