加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如果列表不为空,scala或scalaz中是否有函数将函数应用于列表?

发布时间:2020-12-16 09:50:03 所属栏目:安全 来源:网络整理
导读:如果列表不为空,scala或 scalaz中是否有函数将函数应用于列表.否则它会返回一些默认值.该函数必须应用于列表本身而不是列表的元素.也就是说,它完成以下任务: implicit class RichList[A,M[A] : Iterable[A]](list: M[A]) { def convertOrElse[B](fn: M[A] =
如果列表不为空,scala或 scalaz中是否有函数将函数应用于列表.否则它会返回一些默认值.该函数必须应用于列表本身而不是列表的元素.也就是说,它完成以下任务:

implicit class RichList[A,M[A] <: Iterable[A]](list: M[A]) {
  def convertOrElse[B](fn: M[A] => B,whenEmpty: B) = {
    if (!list.isEmpty) fn(list) else whenEmpty
  }
}

用法示例:
???mylist.convertOrElse(“prefix”_.mkString(“,”),“”)

我记得在某个地方看过这个,但它可能是在博客文章或其他一些.我现在似乎无法在scalaz中找到它,但我甚至无法在网上找到最新的scalaz文档(这是一个不同的问题:)

正如你所看到的那样,我已经编写了我自己的隐含内容,但是当一个适当的scalaz导入可以解决这个问题时,我讨厌添加自己的含义.

解决方法

您应该能够使用Scalaz中的NonEmptyList功能,如下所示:

import scalaz._
import Scalaz._        
val list = List()    
val str = list.toNel.map(_.list.mkString(",")).getOrElse("empty")
println(str)

在我的例子中,你会看到“空”这个词打印出来.如果您将列表定义更改为:

val list = List("foo","bar")

然后你会看到“foo,bar”打印出来.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读