scalabeginner
Advanced Map Operations
Advanced Map usage: merge, transform, groupMapReduce, default values, and nested maps.
scalaPress ⌘/Ctrl + Shift + C to copy
@main def run(): Unit =
val prices = Map("apple" -> 1.50, "banana" -> 0.75, "cherry" -> 2.00)
// Transform values
val doubled = prices.view.mapValues(_ * 2).toMap
println(s"Doubled: $doubled")
// Filter
val expensive = prices.filter((_, v) => v > 1.0)
println(s"Expensive: $expensive")
// Map entries
val formatted = prices.map((k, v) => k.capitalize -> f"$$$v%.2f")
println(s"Formatted: $formatted")
// Merge maps
val stock1 = Map("apple" -> 10, "banana" -> 5)
val stock2 = Map("banana" -> 3, "cherry" -> 8)
// Last wins
val merged = stock1 ++ stock2
println(s"\nMerged (last wins): $merged")
// Sum values on conflict
val summed = (stock1.toSeq ++ stock2.toSeq)
.groupMapReduce(_._1)(_._2)(_ + _)
println(s"Summed: $summed")
// Default values
val withDefault = prices.withDefaultValue(0.0)
println(s"\nKnown: ${withDefault("apple")}")
println(s"Unknown: ${withDefault("mango")}")
// getOrElse
val safeGet = prices.getOrElse("mango", -1.0)
println(s"GetOrElse: $safeGet")
// Nested maps / groupBy
val people = List(
("Alice", "Engineering", 95000),
("Bob", "Engineering", 85000),
("Carol", "Marketing", 75000),
("Dave", "Marketing", 80000),
("Eve", "Engineering", 90000)
)
val byDept = people.groupBy(_._2)
println(s"\nBy department:")
byDept.foreach { (dept, members) =>
println(s" $dept: ${members.map(_._1).mkString(", ")}")
}
// groupMapReduce: group, map, reduce in one pass
val avgSalary = people
.groupMapReduce(_._2)(p => (p._3.toDouble, 1)) {
case ((sum1, c1), (sum2, c2)) => (sum1 + sum2, c1 + c2)
}
.view.mapValues((sum, count) => sum / count)
.toMap
println(s"\nAvg salary: $avgSalary")
// Sorted maps
import scala.collection.immutable.SortedMap
val sorted = SortedMap.from(prices)
println(s"\nSorted: $sorted")
// Map operations
println(s"\nKeys: ${prices.keys.toList}")
println(s"Values: ${prices.values.toList}")
println(s"Contains: ${prices.contains("apple")}")
println(s"Size: ${prices.size}")
// Collect / partial function on map
val deals = prices.collect {
case (name, price) if price < 1.0 => s"$name on sale!"
}
println(s"Deals: $deals")
// Fold map
val totalValue = prices.foldLeft(0.0)((acc, kv) => acc + kv._2)
println(f"Total: $$$totalValue%.2f")
// Invert map (swap keys and values)
val inverted = prices.map(_.swap)
println(s"Inverted: $inverted")Use Cases
- Data aggregation and grouping
- Configuration management
- Lookup table operations
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
scalabeginner
Map and HashMap Operations
Work with Scala Maps: create, update, merge, transform, and use default values.
Best for: Configuration management
#scala#map
scalabeginner
Collections Map Filter Fold Operations
Master Scala collections: map, flatMap, filter, fold, groupBy, partition, and zip operations.
Best for: Data transformation and aggregation
#scala#collections
scalabeginner
Set Operations and Algorithms
Perform set operations: union, intersection, difference, subsets, and practical set algorithms.
Best for: Deduplication and uniqueness
#scala#set
scalaintermediate
Thread-Safe Concurrent Collections
Use concurrent collections for thread-safe access: TrieMap, concurrent queues, and synchronized wrappers.
Best for: Thread-safe service registries
#scala#concurrent