首页 > 其他分享 >Scala中集合中的View用法

Scala中集合中的View用法

时间:2023-03-10 23:13:10浏览次数:45  
标签:flatMap val Scala 用法 eval view def View

设想以下这个计算

def eval(i: Int): Option[Int] = {
  println(s"invoke with $i")
  if (i % 2 == 0) {
    None
  } else {
    Some(i + 1)
  }
}

@Test
def test(): Unit = {
  // 3 will also be invoked
  val s = Seq(1, 3)
  val f = s.flatMap(x => eval(x)).collectFirst({ case x => x})
}

test 执行的目的是想在seq中找到第一个eval函数返回的非空的值(首先Scala中flatMap计算中返回为None的值是不会被添加到几个中的)。
但是上面的计算在 1执行并且符合条件后还会继续执行,这里如何提前退出呢?

  @Test
  def test4(): Unit = {
    val s = Seq(1, 3)
    val f = s.view.flatMap(x => eval(x))
    println(f.head)
  }

这里通过s.view让整个flatMap都推迟计算了,val newArr = s.view.flatMap(x => eval(x))并不会触发计算,只有当f.head被执行时,才触发真正的计算。

https://stackoverflow.com/questions/29061957/break-flatmap-after-first-some-occurence
https://docs.scala-lang.org/overviews/collections-2.13/views.html

标签:flatMap,val,Scala,用法,eval,view,def,View
From: https://www.cnblogs.com/Aitozi/p/17204932.html

相关文章

  • GridView(网格视图)的基本使用
    本节给大家介绍的是第二个Adapter类的控件——GridView(网格视图),见名知义,ListView是列表,GridView就是显示网格!他和ListView一样是AbsListView的子类!很多东西和ListView都......
  • JS代码加密:Eval的终极用法
    Eval加密的终极用法Eval加密,做为一种传统且古老的JS代码加密方法,相信很多人都知道。例如这个在线Eval加密:​​https://www.fairysoftware.com/js_jia_mi_eval.html​​但这......
  • Ansible常见特殊模块用法记录
    Ansible常见特殊模块用法记录1、delegate_to:将某一个任务委托给指定主机-name:"getinventory_hostname"shell:echo{{inventory_hostname}}$HOSTNAME>>/tmp/......
  • Shell脚本中常见的特殊命令用法记录
    Shell脚本中常见特殊命令用法记录1、信号捕获:traptrap"commands"signals#接收到signals指定的信号时,执行commands命令。trapsignals#如果没有指定命令就是恢复s......
  • DataGridView绑定数据并操作
     BindingList<VideoInfo>VideoPlayList=null;//定义VideoPlayList=newBindingList<VideoInfo>(AppManager.CreateInstance().PlayList.VideoList);//List<T>绑......
  • C# SelectMany的用法
    1、建立如下类:///<summary>///年级///</summary>publicclassGrade{///<summary>///年级名///</summary>......
  • Appium - 调试 webview
    webviewAndroid(6.0以上)需要打开webview调试开关if(Biuld.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){WebView.setWebContentsDebuggingEnabled(true);}......
  • const 的一些作用用法
    packagemainimport"fmt"constpi=3.1415926const( //const常量 aa=200 bb=1000 cc)const( //在const下方不定义值会于上方相同 a1=iota a2 ......
  • np.linspace用法
    np.linspace主要用来创建等差数列对于数列,若满足: 则称该数列为等差数列。其中,公差d为一常数,n为正整数。 numpy.linspace(start,stop,num=50,endpoint=True,......
  • sql用法
    1.selectcount(0)在统计表的行数时候,经常用到selectcount(*), 然而对于行数很多的大表,这样的查询速度将会很慢。因为这样的查询对表的每一行都会进行每个列的扫描。......