Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Recimo da nam String position moze imati samo jednu od cetiri vrijednosti "GK", "DF", "MF" i "FW".
- // Nije bas pogodno koristiti Scala enumeracije, a ovdje ne mogu definisati Java enumeraciju, pa cu
- // uvesti nekih novih stvari usput.
- type Position = String
- type RealMadrid = List[FootballPlayer]
- // Definisanje case klase. Ona uz sebe ima definisane gettere, copy konstruktor, toString, equals, itd.
- case class FootballPlayer(name: String, position: Position, height: Double) {
- // Provjerava neke stvari pri pozivu konstruktora, ali baca Exception.
- require(position == "GK" || position == "DF" || position == "MF" || position == "FW")
- }
- // Ukoliko nam je pozicija nesto drugo, dobice se Exception
- // val p1: FootballPlayer = FootballPlayer(name = "Sergio Ramos", position = "GOD", height = 1.86)
- // Definisacemo sad listu fudbalera. Mozes koristiti Seq ili List. Slican im je API.
- val players: RealMadrid = List(
- FootballPlayer("Sergio Ramos", "DF", 1.86),
- FootballPlayer("Keylor Navas", "GK", 1.88),
- FootballPlayer("Raphael Varane", "DF", 1.91),
- FootballPlayer("Isco Alarcon", "MF", 1.76),
- FootballPlayer("Marco Asensio", "MF", 1.82),
- FootballPlayer("Cristiano Ronaldo", "FW", 1.85)
- )
- // Sad malo funkcije nad kolekcijama
- // a) Uzimamo sve igrace koji su "MF" i visi od 1.8m
- players.filter(_.position == "MF").filter(_.height > 1.8)
- // b) Grupisimo igrace po pozicijama da bismo dobili mapu gdje je kljuc pozicija igraca
- val playersByPosition = players.groupBy(_.position)
- // c) Sad recimo da zelimo da izvucemo nazad te igrace. Flatten primjer (radi sa listama)
- playersByPosition.values.flatten
- List(List(1, 2), List(3, 4, 5), List(1, 5), List(), List(22)).flatten
- // d) Hajde da izracunamo prosjecnu visinu svih igraca u Realu
- players.map(_.height).sum / players.size
- players.foldLeft(0.0)((acc, p) => acc + p.height) / players.size
- private def average(players: RealMadrid): Double = players.foldLeft(0.0)((acc, p) => acc + p.height) / players.size
- // e) Izracunajmo prosjecne visine po pozicijama
- playersByPosition.mapValues(average)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement