Quite often, you will come across a situation where a type that you don't have control over will benefit from an extra function. Maybe you've always wished that String had a reverse() function, or perhaps that list had a drop function that would return a copy of list with the first k elements removed.
An object-orientated approach would be to extend the type, thereby creating a subtype that adds the required new functions:
    abstract class DroppableList<E> : ArrayList<E>() { 
      fun drop(k: Int): List<E> { 
        val resultSize = size - k 
        when { 
          resultSize <= 0 -> return emptyList<E>() 
          else -> { 
            val list = ArrayList<E>(resultSize) 
            for (index in k..size - 1) { 
              list.add(this[index]) 
            } 
            return list 
         ...