scala和java抽象类
注意 :本篇文章并不声称或什至没有权威性,但尝试涵盖我发现最有用的某些迭代样式和构造。
因此,事不宜迟,在我们开始攀爬时,让链条发出的喀哒声逐渐响起。
如果()
例如 if()作为三元表达式
val result = if (1 > 2) true else false
例如,如果是仅声明一个返回值的三元数
var result2 = if(1>2) 1 // assigns result2 = AnyVal
而做..而
例如 while()和do .. while()
var i = 0
while(i < 3) println("Hello " + {i = i + 1; i} )
要么
do { println("Hello " + { i = i + 1; i } ) } while(i < 3)
为(我到/直到)
例如 for()理解中的生成器和过滤器
for(i <- 1 to 4; j <- 1 until 4 if (i * j % 2 == 0)) { println(i * j) }
- for表达式中包含的子句实际上是闭包,因此,它们无法在预期的必要意义上“中断”。
- 急切求值是大多数for()表达式的默认实现。
- 使用集合的.view可以对break子句进行“实时” (即lazy )评估。 (注意:view替换了[now]不推荐使用的.projection方法)
- 但是…要实际上早点退出关闭,应根据投影的替代对象评估中断条件。
用于使用函数形式()理解例如 An例如:
var multiplesOfTwo = for(i <- 1 to 10 if i % 2 == 0) yield i
例如 ,通过中断门对()理解进行惰性评估
var gate = true // note this has to be a 'var' type, as we hope to reassign the variable during iteration
for(i <- testList.view.takeWhile(i => gate)) if(i < 5) println(i) else gate = false
例如,使用while()逃避非Collection迭代
var index = 1
var escapeGate = false
while(index < 10000000 && !escapeGate) {
if(index > 5) escapeGate = true
println(index)
i += 1
}
列表上的有用操作
例如创建一个列表
val testList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
要么
val testList = 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: 7 :: 8 :: 9 :: 10 :: Nil
例如 List元素之间的继承
class Car; class Vovlo extends Car; class VW extends Car;
var lcdList = List(new Volvo()) ::: List(new VW()) // returns a List of Type 'Car'
foreach()
使用:将函数应用于列表的每个元素。 此循环构造用于创建的副作用
例:
testList foreach(x => println(x*2))
例如, foreach具有推断的参数
testList foreach(println)
和
testList foreach(println _)
过滤()
使用:从列表中选择满足给定谓词的所有元素。
例:
val evensList = testList filter (_ % 2 == 0)
注意:返回列表中元素的顺序将从源列表中保留。
划分()
使用:根据提交的谓词将一个列表分为2个列表,并返回包含返回列表的Tuple2。
例:
val tupleWrappedOddAndEvenLists = testList partition (_ % 2 == 0)
// the individual elements of the Tuple can be accessed in the usual way, e.g.:
println(tupleWrappedOddAndEvenLists._1)
注意: Scala中的元组支持和用法不只是充当简单包装器来输入/返回多个变量,因为它们也可以在提取器中使用 ,因此可以在模式匹配中重用。 这两个主题都超出了本文的范围。
对所有人()
使用:返回一个布尔值,该布尔值指示List的所有元素是否都通过给定的谓词
例:
testList forall(a => a.isInstanceOf[Int])
存在()
用途:根据给定谓词测试给定List的任何元素是否为真
例:
testList exists(a => a == 4)
地图()
使用:将函数应用于列表的所有元素,并返回包含结果的新列表。
例:
val doubledList = testList map (_ * 2)
flatMap()
使用:与地图操作类似,但是会将结果串联到一个列表中。 例如,给定一个列表列表和一个函数作为输入参数,则返回单个(转换的)列表。
例:
val palindromeList = List(testList, testList reverse) flatMap (_.toList)
折叠[左/右]()
例:
(1 foldLeft testList) (_-_) // This takes the seed value for the consolidated return as 1, before applying the muliplication operation on all elements of the palindromeList (effectively adding the results into a running total)
// to see the difference in foldLeft and foldRight for noncommutative operations, let's look at the minus operations applied with a foldLeft and a foldRight (using the shorthand syntax), and observe how the results differ:
(1 /: testList) (_-_) // left fold on the minus operation returns -54
(testList :\ 1) (_-_) // right fold on the minus operation returns -4
相关: 变态
减少[左/右]()
使用:将给定函数递归应用于List中的元素。 第一次迭代的结果值用作后续迭代的主要输入,这是替换模式,然后递归应用。
例:
testList reduceLeft ((a, b) => if (a > b) a else b)
参考: 具有控制权的力量… Scalabound博客上来自JCG合作伙伴 Kingsley Davies的Scala中的控制结构和抽象 。
翻译自: https://www.javacodegeeks.com/2012/06/power-with-control-scala-control.html
scala和java抽象类