|
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)
|
|