Понимание `andThen`

Я столкнулся с andThen, но не понял его правильно.

Чтобы посмотреть на него дальше, я прочитал Function1.andThen docs.

def andThen[A](g: (R) ⇒ A): (T1) ⇒ A

mm является MultiMap экземпляром.

scala> mm
res29: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[String]] with scala.collection.mutable.MultiMap[Int,String] = 
                    Map(2 -> Set(b) , 1 -> Set(c, a))

scala> mm.keys.toList.sortWith(_ < _).map(mm.andThen(_.toList))
res26: List[List[String]] = List(List(c, a), List(b))

scala> mm.keys.toList.sortWith(_ < _).map(x => mm.apply(x).toList)
res27: List[List[String]] = List(List(c, a), List(b))

Примечание - код из DSL в действии

Является ли andThen мощным? Исходя из этого примера, он выглядит как mm.andThen de-sugars на x => mm.apply(x). Если есть более глубокий смысл andThen, я еще не понял его.

Ответ 1

andThen - это просто составная функция. Для функции f

val f: String => Int = s => s.length

andThen создает новую функцию, которая применяет f, за которой следует функция аргумента

val g: Int => Int = i => i * 2

val h = f.andThen(g)

h(x) тогда g(f(x))