flatMap (Scala)
Was a little confused on how flatMap works, so writing some notes here.
This stackoverflow gives a good explanation.
flatMap, because flatMap expects the function to return a collection (or a collection-like result, such as Option, List, Seq, etc.).
map is pretty intuititve.
mapvs.flatMap
- map takes a function and applies it to each element of a sequence, returning a new sequence with the results of the function
- flatMap transforms each element into a collection of elements
On
flatMap...flatMap expects the function to return a collection (or a collection-like result, such as Option, List, Seq, etc.)
Consider the following Vehicle class:
class Vehicle(val name: String, val model: String, val age: Int, val color: String)
val vehicles = Seq(
new Vehicle("Honda", "Civic", 2023, "Red"),
new Vehicle("Toyota", "Corolla", 2022, "Blue"),
new VehIf you use .map, you would get the following results
val vehicleNames = vehicles.map(vehicle => vehicle.name)
println(vehicleNames)
// List(Honda, Toyota, Suzuki)However, using .flatMap:
val vehicleParts = vehicles.flatMap(vehicle => vehicle.name)
println(vehicleParts)
// List(H, o, n, d, a, T, o, y, o, t, a, S, u, z, u, k, i)How does that work?
vehicle.namereturns aString, for example,"Honda".- In Scala, a
Stringis treated as a collection ofCharelements (i.e., it is essentially like a sequence of characters).
When you apply flatMap to a String, it treats the String as a collection of characters and flattens those characters into the final result.
What if the function you use to flatMap returns an
Int?In that case, it wouldn’t work.