Scala 中的 Forall() 函数

Suraj P 2023年1月30日
  1. 在 Scala 中使用 forall() 函数迭代集合
  2. 在 Scala 中使用 forall() 函数处理一个空集合
  3. 在 Scala 中使用 forall()HashMap
  4. 在 Scala 中使用 forall()getOrElse() 函数
  5. Scala 中 foreachforall 的区别
  6. 结论
Scala 中的 Forall() 函数

本文将展示 Scala 的 forall() 函数并查看各种示例以了解其用例。

Scala 的 forall() 函数用于在元素集合上应用谓词逻辑。它用于检查我们应用的谓词逻辑是否满足所有集合元素。

语法:

trait Collection[T] {
  def forall(p: (T) => Boolean): Boolean
}

forall() 函数检查集合的所有元素是否满足谓词 p 并相应地返回真或假,因为它具有布尔返回类型。让我们看一些将谓词逻辑应用于元素集合的实例。

在 Scala 中使用 forall() 函数迭代集合

下面的示例显示了一个片段,其中 forall 与列表一起使用。

示例代码:

object workspace  {

  def main(args:Array[String])
  {
    val studentMarks = List(55, 60, 20, 90, 80)

    //applyaing forall method on list
    val result = studentMarks.forall(y => y>=50)

    if(result)
      {
        println("Student passed the examination")
      }
    else
      println("Student has failed the examination")
      }
  }

输出:

Student has failed the examination

逻辑是列表 studentMarks 内的元素应该大于或等于 50。由于 20 小于 50,所以返回 else 语句并存储在结果变量中。

之后,我们使用 if 条件检查结果并相应地打印输出。

在 Scala 中使用 forall() 函数处理一个空集合

forall 方法在处理空集合时总是返回 true,因为列表中的任何元素都没有违反谓词逻辑。如果列表中没有元素,则谓词逻辑永远不会为假。

示例代码:

object workspace  {

  def main(args:Array[String])
  {
    val studentMarks = List[Int]()

    //applyaing forall method on list
    val result = studentMarks.forall(y=>y>1)

    if(result)
      {
        println("forall returns true")
      }
    else
      println("forall returns false")
  }
}

输出:

forall returns true

在 Scala 中使用 forall()HashMap

forall 在这里非常有用。每当我们想对 HashMap 的所有键应用某个条件或检查所有键值对是否满足某个条件时,我们可以使用 forall() 函数。

示例代码:

import scala.collection.mutable

object workspace {
  def main(args: Array[String]): Unit = {
    val mp = mutable.HashMap[Int, Int](1 -> 100, 2 -> 200, 3->300)

    val allValuesHunderedTimeTheKey = mp.forall { case (key, value) => key * 100 == value }
    println(allValuesHunderedTimeTheKey)
  }
}

输出:

true

我们使用 forall 检查每个值是否是键值的 100 倍。由于所有元素都满足谓词,因此返回 true

在 Scala 中使用 forall()getOrElse() 函数

示例代码:

object workspace {
  def main(args: Array[String]): Unit = {
    val names : Option[Seq[String]] = Option(Seq("Iron man", "Tony", "Stark"))
    println(names.map(_.forall(Seq("Bruce").contains)).getOrElse(false))
  }
}

输出:

false

map 已将 Option 内的序列创建为布尔值,然后 getOrElse 提供最终结果,提供默认布尔值。

Scala 中 foreachforall 的区别

foreach 经常被初学者与 forall 混淆。让我们看看它们之间的区别。

  1. foreach 函数允许我们遍历元素的集合。
  2. forall 函数采用布尔谓词,检查所有元素,如果元素满足条件,则返回 true

示例代码:

object workspace {
  def main(args: Array[String]): Unit = {
    val studentMarks = List(55, 60, 20, 90, 80)

    //applyaing forall method on list
    val result = studentMarks.forall(y => y>=50)

    println(result)

    studentMarks.foreach(x => println(2*x))
  }
}

输出:

false
110
120
40
180
160

使用 forall(),我们正在检查每个元素是否大于或等于 50,它返回 false,因为元素 20 不符合条件并使用 foreach(),我们正在迭代所有元素并仅打印该元素的双倍。

结论

在本文中,我们了解了 Scala 的 forall() 函数及其在各种条件下将谓词逻辑应用于元素集合的用途。

作者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub