risc-v中文社区

 找回密码
 立即注册
查看: 1139|回复: 0

[原创] Option,Map,flatMap,CanBuildFrom实验

[复制链接]

5

主题

8

帖子

49

积分

新手上路

Rank: 1

积分
49
发表于 2021-7-28 17:16:34 | 显示全部楼层 |阅读模式
object EitherOptionTest { //代码来自:https://blog.csdn.net/JasonDing1354/article/details/46822417
  def toInt(s: String): Option[Int] = {
    try {
      Some(Integer.parseInt(s))
    }
    catch {
      case e: Exception => {
        println(e.getMessage); None
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val ii = toInt("123")
    val ie = toInt("abc")
    println(ii) //Some(123)
    println("ie=" + ie) //ie=None

    val bag = List("1", "2", "foo", "4", "bar")
    val flatten = bag.map(toInt(_)).flatten //flatten的作用?????????
    flatten.foreach(println) //1 2 4
    val flatmap = bag.flatMap(toInt)
    flatmap.foreach(println)
    println("------------------")
    val p1 = new people("小红", Seq("朋友1", "朋友2", "朋友3"))
    val p2 = new people("小明", Seq("朋友3", "朋友4", "朋友5"))
    val seqs = Seq[people](p1, p2)
    val c = seqs.map(f => f.friends)
    println(c) //List(List(朋友1, 朋友2, 朋友3), List(朋友3, 朋友4, 朋友5))
    val d = seqs.flatMap(f=>f.friends)
    println(d) //List(朋友1, 朋友2, 朋友3, 朋友3, 朋友4, 朋友5)
    val e = bag.flatMap(f=>f)
    val e2 = bag.map(f=>f)
    println(e) //List(1, 2, f, o, o, 4, b, a, r)
    println("______________")
    println(e2) //List(1, 2, foo, 4, bar)
    val n = List(123,456,789)
    val e3 = n.map(f=>f)
//    总结:map是对List中元素逐一进行函数操作映射为另外一个List,而flatMap操作是将函数应用于List之中的每一个元素,将返回的迭代器的所有内容构成新的List。
//    flatMap与map区别在于map为“映射”,而flatMap“先映射,后扁平化”,map对每一次(func)都产生一个元素,返回一个对象,而flatMap多一步就是将所有对象合并为一个对象。
//    原文链接:https://blog.csdn.net/weixin_44024821/article/details/94010188
    val e4 = n.flatMap(f => (f to 790))
//    println(e4)
    val cffm = Array(new classforflatmap("zs",12),new classforflatmap("li",13),new classforflatmap("ww",14))
    val e5 = cffm.flatMap(f=>Seq(f))
    e5.foreach(println)
    //scala.joe.com.implicits.classforflatmap@564718df
    //scala.joe.com.implicits.classforflatmap@51b7e5df
    //scala.joe.com.implicits.classforflatmap@18a70f16
    println(";;;;;;;;;;;;;;;;;;;")
    println(e5) //[Lscala.joe.com.implicits.classforflatmap;@62e136d3
    e5.foreach(t=>println(t.n + " " + t.a))
    //zs 12
    //li 13
    //ww 14
//    val e6 = cffm.flatMap(f=>f)

//    原文链接:https://blog.csdn.net/weixin_44024821/article/details/94010188
    val dd = 1.to(5,2)
    println(dd) //Range 1 to 5 by 2
    dd.foreach(println) //1 3 5
    val ddd = dd.map(t=>(t to 6))
    ddd.foreach(println) //此一句代码将会打印下面三行
    //Range 1 to 6
    //Range 3 to 6
    //Range 5 to 6
    println("++++++++++++++++++++++")
    val dddd = dd.flatMap(t=>(t to 6))
    dddd.foreach(println)
    //1
    //2
    //3
    //4
    //5
    //6
    //3
    //4
    //5
    //6
    //5
    //6

    //关于CanBuildFrom介绍 参考:https://blog.csdn.net/weixin_34352449/article/details/87940983
    val foo = "Foo".map(c=>c.toUpper)
    val fooint = "Foo".map(c=>c.toInt)
    val foo3 = Array(1,2,3).map(f=>f.toString)
//需要一个CanBuildFrom类型的隐式参数如何做 http://www.voidcn.com/article/p-owppxglb-bwr.html
    //scala容器类体系结构 https://www.cnblogs.com/cbscan/articles/4147757.html
  }
}

class people(val name: String, val friends: Seq[String])
class classforflatmap(val n:String,val a:Int)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-27 17:36 , Processed in 0.024300 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表