Examples for collection transformations in Kotlin (#8912)
This commit is contained in:
parent
c5ba081f7c
commit
32ff2077a3
|
@ -0,0 +1,48 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class AssociateUnitTest {
|
||||
@Test
|
||||
fun testToMap() {
|
||||
val input = listOf(Pair("one", 1), Pair("two", 2))
|
||||
val map = input.toMap()
|
||||
assertEquals(mapOf("one" to 1, "two" to 2), map)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAssociateWith() {
|
||||
val inputs = listOf("Hi", "there")
|
||||
val map = inputs.associateWith { k -> k.length }
|
||||
assertEquals(mapOf("Hi" to 2, "there" to 5), map)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAssociateBy() {
|
||||
val inputs = listOf("Hi", "there")
|
||||
val map = inputs.associateBy { v -> v.length }
|
||||
assertEquals(mapOf(2 to "Hi", 5 to "there"), map)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAssociate() {
|
||||
val inputs = listOf("Hi", "there")
|
||||
val map = inputs.associate { e -> Pair(e.toUpperCase(), e.reversed()) }
|
||||
assertEquals(mapOf("HI" to "iH", "THERE" to "ereht"), map)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAssociateByDuplicateKeys() {
|
||||
val inputs = listOf("one", "two")
|
||||
val map = inputs.associateBy { v -> v.length }
|
||||
assertEquals(mapOf(3 to "two"), map)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testGroupBy() {
|
||||
val inputs = listOf("one", "two", "three")
|
||||
val map = inputs.groupBy { v -> v.length }
|
||||
assertEquals(mapOf(3 to listOf("one", "two"), 5 to listOf("three")), map)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class FilterUnitTest {
|
||||
@Test
|
||||
fun testFilterWithLambda() {
|
||||
val input = listOf(1, 2, 3, 4, 5)
|
||||
val filtered = input.filter { it <= 3 }
|
||||
assertEquals(listOf(1, 2, 3), filtered)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFilterWithMethodReference() {
|
||||
val input = listOf(1, 2, 3, 4, 5)
|
||||
val filtered = input.filter(this::isSmall)
|
||||
assertEquals(listOf(1, 2, 3), filtered)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFilterNotWithMethodReference() {
|
||||
val input = listOf(1, 2, 3, 4, 5)
|
||||
val filtered = input.filterNot(this::isSmall)
|
||||
assertEquals(listOf(4, 5), filtered)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFilterIndexed() {
|
||||
val input = listOf(5, 4, 3, 2, 1)
|
||||
val filtered = input.filterIndexed { index, element -> index < 3 }
|
||||
assertEquals(listOf(5, 4, 3), filtered)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFilterNotNull() {
|
||||
val nullable: List<String?> = listOf("Hello", null, "World")
|
||||
val nonnull: List<String> = nullable.filterNotNull()
|
||||
assertEquals(listOf("Hello", "World"), nonnull)
|
||||
}
|
||||
|
||||
private fun isSmall(i: Int) = i <= 3
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class FlattenUnitTest {
|
||||
@Test
|
||||
fun testFlatten() {
|
||||
val inputs = listOf("one", "two", "three")
|
||||
val characters = inputs.map(String::toList)
|
||||
val flattened = characters.flatten();
|
||||
assertEquals(listOf('o', 'n', 'e', 't', 'w', 'o', 't', 'h', 'r', 'e', 'e'), flattened)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFlatMap() {
|
||||
val inputs = listOf("one", "two", "three")
|
||||
val characters = inputs.flatMap(String::toList)
|
||||
assertEquals(listOf('o', 'n', 'e', 't', 'w', 'o', 't', 'h', 'r', 'e', 'e'), characters)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class JoinToUnitTest {
|
||||
@Test
|
||||
fun testJoinToString() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val simpleString = inputs.joinToString()
|
||||
assertEquals("Jan, Feb, Mar, Apr, May", simpleString)
|
||||
|
||||
val detailedString = inputs.joinToString(separator = ",", prefix="Months: ", postfix=".")
|
||||
assertEquals("Months: Jan,Feb,Mar,Apr,May.", detailedString)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJoinToStringLimits() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val simpleString = inputs.joinToString(limit = 3)
|
||||
assertEquals("Jan, Feb, Mar, ...", simpleString)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJoinToStringTransform() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val simpleString = inputs.joinToString(transform = String::toUpperCase)
|
||||
assertEquals("JAN, FEB, MAR, APR, MAY", simpleString)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJoinTo() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val output = StringBuilder()
|
||||
output.append("My ")
|
||||
.append(inputs.size)
|
||||
.append(" elements: ")
|
||||
inputs.joinTo(output)
|
||||
|
||||
assertEquals("My 5 elements: Jan, Feb, Mar, Apr, May", output.toString())
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class MapUnitTest {
|
||||
@Test
|
||||
fun testMapWithLambda() {
|
||||
val input = listOf("one", "two", "three")
|
||||
|
||||
val reversed = input.map { it.reversed() }
|
||||
assertEquals(listOf("eno", "owt", "eerht"), reversed)
|
||||
|
||||
val lengths = input.map { it.length }
|
||||
assertEquals(listOf(3, 3, 5), lengths)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMapIndexed() {
|
||||
val input = listOf(3, 2, 1)
|
||||
val result = input.mapIndexed { index, value -> index * value }
|
||||
assertEquals(listOf(0, 2, 2), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMapNotNull() {
|
||||
val input = listOf(1, 2, 3, 4, 5)
|
||||
val smallSquares = input.mapNotNull {
|
||||
if (it <= 3) {
|
||||
it * it
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
assertEquals(listOf(1, 4, 9), smallSquares)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mapMapKeys() {
|
||||
val inputs = mapOf("one" to 1, "two" to 2, "three" to 3)
|
||||
|
||||
val uppercases = inputs.mapKeys { it.key.toUpperCase() }
|
||||
assertEquals(mapOf("ONE" to 1, "TWO" to 2, "THREE" to 3), uppercases)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mapMapValues() {
|
||||
val inputs = mapOf("one" to 1, "two" to 2, "three" to 3)
|
||||
|
||||
val squares = inputs.mapValues { it.value * it.value }
|
||||
assertEquals(mapOf("one" to 1, "two" to 4, "three" to 9), squares)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class ReduceUnitTest {
|
||||
@Test
|
||||
fun testJoinToStringAsReduce() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val result = inputs.reduce { acc, next -> "$acc, $next" }
|
||||
assertEquals("Jan, Feb, Mar, Apr, May", result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFoldToLength() {
|
||||
val inputs = listOf("Jan", "Feb", "Mar", "Apr", "May")
|
||||
|
||||
val result = inputs.fold(0) { acc, next -> acc + next.length }
|
||||
assertEquals(15, result)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.baeldung.collections.transformations
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class ZipUnitTest {
|
||||
@Test
|
||||
fun testZip() {
|
||||
val left = listOf("one", "two", "three")
|
||||
val right = listOf(1, 2, 3)
|
||||
val zipped = left.zip(right)
|
||||
assertEquals (listOf(Pair("one", 1), Pair("two", 2), Pair("three", 3)), zipped)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testZipShort() {
|
||||
val left = listOf("one", "two")
|
||||
val right = listOf(1, 2, 3)
|
||||
val zipped = left.zip(right)
|
||||
assertEquals (listOf(Pair("one", 1), Pair("two", 2)), zipped)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testUnzip() {
|
||||
val left = listOf("one", "two", "three")
|
||||
val right = listOf(1, 2, 3)
|
||||
val zipped = left.zip(right)
|
||||
|
||||
val (newLeft, newRight) = zipped.unzip()
|
||||
assertEquals(left, newLeft)
|
||||
assertEquals(right, newRight)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue