Skip to content

Instantly share code, notes, and snippets.

@hrules6872
Created February 22, 2023 07:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hrules6872/4901251f7cf63e04c1d28c22038a0825 to your computer and use it in GitHub Desktop.
Save hrules6872/4901251f7cf63e04c1d28c22038a0825 to your computer and use it in GitHub Desktop.
Kotlin List.padStart and List.padEnd extensions
fun <TYPE> List<TYPE>.padEndOrCompact(size: Int, fallback: TYPE): List<TYPE> {
if (size < 0) throw IllegalArgumentException("Desired length $size is less than zero.")
return (0 until size).map { this.getOrNull(it) ?: fallback }
}
fun <TYPE> List<TYPE>.padEnd(size: Int, fallback: TYPE): List<TYPE> {
if (size < 0) throw IllegalArgumentException("Desired length $size is less than zero.")
return when {
size > this.size -> this.padEndOrCompact(size, fallback)
else -> this
}
}
fun <TYPE> List<TYPE>.padStartOrCompact(size: Int, fallback: TYPE): List<TYPE> {
if (size < 0) throw IllegalArgumentException("Desired length $size is less than zero.")
return ((0 until size - this.size).map { fallback } + this).takeLast(size)
}
fun <TYPE> List<TYPE>.padStart(size: Int, fallback: TYPE): List<TYPE> {
if (size < 0) throw IllegalArgumentException("Desired length $size is less than zero.")
return when {
size > this.size -> this.padStartOrCompact(size, fallback)
else -> this
}
}
class ListPadExtTest {
@Test
fun `test padEndOrCompact() function`() {
"0123456789".map(Char::toString).let { size10list ->
size10list.padEndOrCompact(11, "x").run {
assertThat(this).hasSize(11)
assertThat(this.first()).isEqualTo("0")
assertThat(this.last()).isEqualTo("x")
}
size10list.padEndOrCompact(9, "x").run {
assertThat(this).hasSize(9)
assertThat(this.first()).isEqualTo("0")
assertThat(this.last()).isEqualTo("8")
}
}
}
@Test
fun `test padEnd() function`() {
"0123456789".map(Char::toString).let { size10list ->
size10list.padEnd(11, "x").run {
assertThat(this).hasSize(11)
assertThat(this.first()).isEqualTo("0")
assertThat(this.last()).isEqualTo("x")
}
size10list.padEnd(9, "x").run {
assertThat(this).hasSize(size10list.size)
assertThat(this.first()).isEqualTo(size10list.first())
assertThat(this.last()).isEqualTo(size10list.last())
}
}
}
@Test
fun `test padStartOrCompact() function`() {
"0123456789".map(Char::toString).let { size10list ->
size10list.padStartOrCompact(11, "x").run {
assertThat(this).hasSize(11)
assertThat(this.first()).isEqualTo("x")
assertThat(this.last()).isEqualTo("9")
}
size10list.padStartOrCompact(9, "x").run {
assertThat(this).hasSize(9)
assertThat(this.first()).isEqualTo("1")
assertThat(this.last()).isEqualTo("9")
}
}
}
@Test
fun `test padStart() function`() {
"0123456789".map(Char::toString).let { size10list ->
size10list.padStart(11, "x").run {
assertThat(this).hasSize(11)
assertThat(this.first()).isEqualTo("x")
assertThat(this.last()).isEqualTo("9")
}
size10list.padStart(9, "x").run {
assertThat(this).hasSize(size10list.size)
assertThat(this.first()).isEqualTo(size10list.first())
assertThat(this.last()).isEqualTo(size10list.last())
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment