scala – 如何理解遍历,遍历和遍历
发布时间:2020-12-16 09:43:28 所属栏目:安全 来源:网络整理
导读:我对于遍历,遍历和遍历的使用情况感到困惑,我在scalaz网站上搜索了简单的代码示例: def sum(x: Int) = x + 1 List(1,2,3).traverseU(sum) 它看起来像(map和aggregate)类似: List(1,3).map(sum).reduceLeft(_ + _) 我认为这不仅仅是为了遍历,我只是想知
我对于遍历,遍历和遍历的使用情况感到困惑,我在scalaz网站上搜索了简单的代码示例:
def sum(x: Int) = x + 1 List(1,2,3).traverseU(sum) 它看起来像(map和aggregate)类似: List(1,3).map(sum).reduceLeft(_ + _) 我认为这不仅仅是为了遍历,我只是想知道这3种方法之间有什么区别,那么我会有一些示例代码来显示差异 提前谢谢了 解决方法
序列用于聚集应用效果。更具体地说,如果G是适用的并且F是可扩展的,则可以将“F [G [A]]转换为G [F [A]]。所以我们可以用它“拉起”一堆应用效果(注意所有Monads都是适用的):
List(Future.successful(1),Future.successful(2)).sequence : Future[List[Int]] // = Future.successful(List(1,2)) List(4.set("abc"),5.set("def")).sequence : Writer[String,List[Int]] // = List(4,5).set("abcdef") 遍历相当于映射然后序列,所以当您有一个返回一个应用程序的函数,并且您想要仅获取一个单独的实例,而不是列出它们时,可以使用它: def fetchPost(postId: Int): Future[String] //Fetch each post,but we only want an overall `Future`,not a `List[Future]` List(1,2).traverse[Future,String](fetchPost): Future[List[String]] traverseU是与遍历相同的操作,只是类型表达不同,以便编译器可以更容易地推断它们。 def logConversion(s: String): Writer[Vector[String],Int] = s.toInt.set(Vector(s"Converted $s")) List("4","5").traverseU(logConversion): Writer[Vector[String],List[Int]] // = List("4","5").map(logConversion).sequence // = List(4.set("Converted 4"),5.set("Converted 5")).sequence // = List(4,5).set(Vector("Converted 4","Converted 5")) traverseM(f)等效于遍历(f).map(_。join),其中join是flatten的scalaz名称。它作为一种“提升flatMap”是有用的: def multiples(i: Int): Future[List[Int]] = Future.successful(List(i,i * 2,i * 3)) List(1,10).map(multiples): List[Future[List[Int]]] //hard to work with List(1,10).traverseM(multiples): Future[List[Int]] // = List(1,10).traverse(multiples).map(_.flatten) // = List(1,10).map(multiples).sequence.map(_.flatten) // = List(Future.successful(List(1,3)),Future.successful(List(10,20,30))) // .sequence.map(_.flatten) // = Future.successful(List(List(1,3),List(10,30))).map(_.flatten) // = Future.successful(List(1,3,10,30)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Route/Bridge docker虚拟适配器,带有zerotier虚拟适配器
- angularjs $http.get 和 $http.post 传递参数
- shell 学习第二十四天----提取开头或结尾数行
- 一个简单的找出网段内存活主机的脚本
- Good Bye SOAP ToolKit , Hello Webservice
- java – Docker中的Consul和Spring Boot服务 – 而不是取
- angular6 路由拼接查询参数如 ?id=1 并获取url参数
- angularjs – 在ui-grid数据刷新后保持选择
- modal模态框隐藏时,模态框短暂显示后,再隐藏
- scala – 如何设置SBT的默认项目