Anes
07/20/2020, 5:29 PMtoVarArg
method it should accept a IterableLike<T>
which is Any
, then I need to check its type and return Pair<T, Array<out T>>
my current solution looks like this (below 👇), I want to know if I am on the right path or I need to rethink this solution, any tips would be appreciated. Thank you for your time.
inline fun <reified T> toVarArg(iterable: IterableLike<T>): Pair<T, Array<out T>> {
when (iterable) {
is Iterable<*> -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is Sequence<*> -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is Array<*> -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is ByteArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is CharArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is ShortArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is IntArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is LongArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is FloatArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is DoubleArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
is BooleanArray -> {
val mappedIterable = iterable.map { it as T }.asIterable()
return mappedIterable.first() to mappedIterable.drop(1).toTypedArray()
}
else -> throw IllegalArgumentException("toVarArg accepts arguments of types Iterable, Sequence, Array")
}
robstoll
07/20/2020, 7:48 PMAnes
07/21/2020, 7:57 AM