val configFile = new java.io.File("someFile.txt")
val configFilePath = if (configFile.exists()) {
configFile.getAbsolutePath()
} else {
configFile.createNewFile()
configFile.getAbsolutePath()
}
val list = List("A", "B", "C")
for (item <- list)
println(item)
输出
A
B
C
生成器表达式
像item <- list这样的表达式被称为生成器表达式
该表达式会基于集合生成单独的数值
左箭头操作符(<-)用于对象列表这样的集合进行遍历
保护式: 筛选元素
for语句中可以加入if表达式来筛选元素,这些表达式被称为保护式(guard)
示例
代码
val list = List("ABC", "CDE", "EFG")
for (item <- list
if item.contains("C")
)
println(item)
输出
ABC
CDE
添加多个保护式
示例
val list = List("ABC", "BCD", "CDE")
for (item <- list
if item.contains("B")
if !item.startsWith("A")
)
println(item)
for (item <- list
if item.contains("B") && !item.startsWith("A")
)
println(item)
输出
BCD
BCD
分别为两个for循环的输出
Yielding
使用yielding关键字能在for表达式中生成新的集合
示例
代码
val list = List("ABC", "BCD", "CDE")
val filterItems = for {item <- list
if item.contains("B")
if !item.startsWith("A")
} yield item
filterItems
运行
scala> val list = List("ABC", "BCD", "CDE")
list: List[String] = List(ABC, BCD, CDE)
scala> val filterItems = for {item <- list
| if item.contains("B")
| if !item.startsWith("A")
| } yield item
filterItems: List[String] = List(BCD)
扩展作用域与值定义
能够在for表达式中的最初部分定义值,并可在以后的表达式中使用该值
示例
代码
val list = List("abc", "bcd", "cde")
val upcaseItems = for {
item <- list
upcaseItem = item.toUpperCase()
} yield upcaseItem
运行
scala> val list = List("abc", "bcd", "cde")
list: List[String] = List(abc, bcd, cde)
scala>
| val upcaseItems = for {
| item <- list
| upcaseItem = item.toUpperCase()
| } yield upcaseItem
upcaseItems: List[String] = List(ABC, BCD, CDE)
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
return true;
}
public static void main(String args[]) {
Person p1 = new Person("sun", 20);
Person p2 = new Person("li", 20);
System.out.println(p1 == p2);
}
}
// 输出:
false
class Person(var name: String, var age: Int) {
override def equals(obj: scala.Any): Boolean = true
}
val p1 = new Person("sun", 20)
val p2 = new Person("sun", 20)
println(p1 == p2)
// 输出:
true
// file: enum.scala
object Breed extends Enumeration {
type Breed = Value
val doberman = Value("Doberman Pinscher")
val yorkie = Value("Yorkshire Terrier")
val scottie = Value("Scottish Terrier")
val dane = Value("Great Dane")
val portie = Value("Portuguese Water Dog")
}
import Breed._
println("ID\tBreed")
for (breed <- Breed.values) println(s"${breed.id}\t$breed")
println("\nJust Terriers:")
Breed.values filter (_.toString.endsWith("Terrier")) foreach println
def isTerrier(b: Breed) = b.toString.endsWith("Terrier")
println("\nJust Terriers:")
Breed.values filter isTerrier foreach println
运行
scala enum.scala
输出
ID Breed
0 Doberman Pinscher
1 Yorkshire Terrier
2 Scottish Terrier
3 Great Dane
4 Portuguese Water Dog
Just Terriers:
Yorkshire Terrier
Scottish Terrier
Just Terriers:
Yorkshire Terrier
Scottish Terrier
可插入字符串
下面是一个简单示例:
val name = "Buck Trends"
println(s"Hello, $name")
格式化
下面是几个对可插入字符串进行格式化的示例.
scala> val gross = 100000F
gross: Float = 100000.0
scala> val net = 64000F
net: Float = 64000.0
scala> val percent = (net / gross) * 100
percent: Float = 64.0
scala> println(f"$$${gross}%.2f vs. $$${net}%.2f or ${percent}%.1f%%")
$100000.00 vs. $64000.00 or 64.0%
scala> val s = "%02d: name = %s".format(5, "Dean Wampler")
s: String = 05: name = Dean Wampler
// 原生插入器
scala> val name = "Dean Wampler"
name: String = Dean Wampler
scala> s"123\n$name\n456"
res1: String =
123
Dean Wampler
456
scala> raw"123\n$name\n456"
res2: String = 123\nDean Wampler\n456