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

Scala:从一种类型的集合到另一种收集

发布时间:2020-12-16 09:12:21 所属栏目:安全 来源:网络整理
导读:关于 Scala中的yield命令和以下示例: val values = Set(1,2,3)val results = for {v - values} yield (v * 2) 任何人都可以解释Scala如何知道收集哪种类型的收藏?我知道这是基于价值观,但是我如何编写复制收益的代码? 有什么办法可以改变收藏的类型吗?在
关于 Scala中的yield命令和以下示例:

val values = Set(1,2,3)
val results = for {v <- values} yield (v * 2)

>任何人都可以解释Scala如何知道收集哪种类型的收藏?我知道这是基于价值观,但是我如何编写复制收益的代码?
>有什么办法可以改变收藏的类型吗?在示例中,我希望结果是List而不是Set.
>没有这个,从一个集合转换到另一个集合的最好方法是什么?我知道_:*,但作为一个集合不是一个Seq这不工作.我可以找到的最好的是val listResults = List()的结果.

PS.我知道这个例子没有遵循推荐的功能方式(这将是使用地图),但这只是一个例子.

解决方法

用于理解的解释由编译器转换为使用 this方案映射/ flatMap /过滤器调用.

This excellent answer by Daniel回答你的第一个问题.

要更改结果集合的类型,可以使用collection.breakout(也在上面链接的帖子中解释.)

scala> val xs = Set(1,3)
xs: scala.collection.immutable.Set[Int] = Set(1,3)

scala> val ys: List[Int] = (for(x <- xs) yield 2 * x)(collection.breakOut)
ys: List[Int] = List(2,4,6)

您可以使用以下方法之一将集合转换为列表:

scala> List.empty[Int] ++ xs
res0: List[Int] = List(1,3)

scala> xs.toList
res1: List[Int] = List(1,3)

推荐阅读:The Architecture of Scala Collections

(编辑:李大同)

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

    推荐文章
      热点阅读