Advertisement
DMG

Collections

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