-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathchapter04.scala
77 lines (62 loc) · 2.08 KB
/
chapter04.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// chapter 4
import java.io.File
import java.util
import java.util.Scanner
import scala.collection.JavaConverters._
// 1
val prices = Map("bike" -> 500.0, "vacuum" -> 110.95, "mattress" -> 400.0, "tesla" -> 100000.0)
val discounts = prices.mapValues(_ * 0.90)
// 2
val file = new File("inputs/longwords.txt")
def iterateWordsInFile(f: File): Iterator[String] =
new Scanner(f).asScala
val words = scala.collection.mutable.Map[String, Int]()
for (w <- iterateWordsInFile(file))
words(w) = words.getOrElse(w, 0) + 1
for ((w, c) <- words) println(s"$w: $c")
// 3
var immuWords = scala.collection.Map[String, Int]()
for (w <- iterateWordsInFile(file))
immuWords += (w -> (immuWords.getOrElse(w, 0) + 1))
for ((w, c) <- immuWords) println(s"$w: $c")
// 4
val sortedWords = scala.collection.mutable.SortedMap[String,Int]()
for (w <- iterateWordsInFile(file))
sortedWords += (w -> (sortedWords.getOrElse(w, 0) + 1))
for ((w, c) <- sortedWords) println(s"$w: $c")
// 5
val treeMap = new util.TreeMap[String,Int]().asScala
for (w <- iterateWordsInFile(file)) {
treeMap += (w -> (treeMap.getOrElse(w, 0) + 1))
}
for ((w, c) <- sortedWords) println(s"$w: $c")
// 6
val weekdays = scala.collection.mutable.LinkedHashMap(
"Monday" -> java.util.Calendar.MONDAY,
"Tuesday" -> java.util.Calendar.TUESDAY,
"Wednesday" -> java.util.Calendar.WEDNESDAY,
"Thursday" -> java.util.Calendar.THURSDAY,
"Friday" -> java.util.Calendar.FRIDAY
)
for ((d, c) <- weekdays) println(s"$d -> $c")
// 7
val props = System.getProperties.asScala
val maxKeyLength = props.keySet.map(_.length).max
for ((k,v) <- props) {
val pk = k.padTo(maxKeyLength, ' ')
println(s"$pk | $v")
}
// 8
def minmax(a: Array[Int]) =
(a.min, a.max)
minmax(Array(5,1,3,7,-1,3))
// 9
def lteqgt(a: Array[Int], v: Int) = {
(a.count(_ < v), a.count(_ == v), a.count(_ > v))
}
lteqgt(Array(5,1,3,7,-1,3), 3)
// 10
"Hello".zip("World")
"Hello".zip("World!")
// plausible use case could be to compare the strings by character:
for ((l, r) <- "Hello".zip("World")) yield l == r