From d831509ceef9c330fe3b60cf501e64445241f581 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Mon, 20 Jul 2015 18:27:58 +0300 Subject: [PATCH] Provide listOfNotNull method. --- libraries/stdlib/src/kotlin/collections/JUtil.kt | 6 ++++++ libraries/stdlib/test/collections/CollectionTest.kt | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/libraries/stdlib/src/kotlin/collections/JUtil.kt b/libraries/stdlib/src/kotlin/collections/JUtil.kt index 44c1aa0cd84..572ac9ee6f8 100644 --- a/libraries/stdlib/src/kotlin/collections/JUtil.kt +++ b/libraries/stdlib/src/kotlin/collections/JUtil.kt @@ -85,6 +85,12 @@ public fun hashSetOf(vararg values: T): HashSet = values.toCollection(Hash /** Returns a new [LinkedHashSet] with the given elements. */ public fun linkedSetOf(vararg values: T): LinkedHashSet = values.toCollection(LinkedHashSet(mapCapacity(values.size()))) +/** Returns a new read-only list either of single given element, if it is not null, or empty list it the element is null. The returned list is serializable (JVM). */ +public fun listOfNotNull(value: T?): List = if (value != null) listOf(value) else emptyList() + +/** Returns a new read-only list only of those given elements, that are not null. The returned list is serializable (JVM). */ +public fun listOfNotNull(vararg values: T?): List = values.filterNotNull() + /** * Returns an [IntRange] of the valid indices for this collection. */ diff --git a/libraries/stdlib/test/collections/CollectionTest.kt b/libraries/stdlib/test/collections/CollectionTest.kt index a213fd01634..ad60d7dd3c2 100644 --- a/libraries/stdlib/test/collections/CollectionTest.kt +++ b/libraries/stdlib/test/collections/CollectionTest.kt @@ -47,6 +47,18 @@ class CollectionTest { } } + test fun listOfNotNull() { + val l1: List = listOfNotNull(null) + assertTrue(l1.isEmpty()) + + val s: String? = "value" + val l2: List = listOfNotNull(s) + assertEquals(s, l2.single()) + + val l3: List = listOfNotNull("value1", null, "value2") + assertEquals(listOf("value1", "value2"), l3) + } + test fun filterIntoSet() { val data = listOf("foo", "bar") val foo = data.filterTo(hashSetOf()) { it.startsWith("f") }