Iterator based on the result of scala.collection.Iterator.empty
, producing no values.
Kotlin defines an internal EmptyIterator
, which can only be obtained indirectly
from empty collections, e.g.:
emptyList<Nothing>().iterator()
Iterator based on the result of scala.collection.Iterator.single[A](elem: A)
, producing a single value.
An iterator for a singleton list is defined in Java, in a package-private static method
java.util.Collections.singletonIterator(E e)
. It can only be obtained indirectly
from a new instance of a singleton list, e.g.:
java.util.Collections.singletonList(element).iterator()
Implementation differences:
exists
has been replaced withany
– Kotlin conventionforall
has been replaced withall
– Kotlin conventionforeach
has been replaced withforEach
– Kotlin conventionorNull
has been replaced withgetOrNull
– Kotlin convention- implemented additional function
filterNotNull
– Kotlin convention
Kotlin introduces its own null-safety mechanisms.
Most of the times, Option
s can be replaced by nullable types in Kotlin, e.g.:
var number: Option<Int> = …
number.map { it.toString() }.getOrElse { "" }
gives the same result as:
var number: Int? = …
number?.let { it.toString() }.orEmpty()
However, Option
s might be useful whenever null
values are not allowed,
e.g. RxJava 2.x Observable
.
Implementation differences:
exists
has been replaced withany
– Kotlin conventionforall
has been replaced withall
– Kotlin conventionforeach
has been replaced withforEach
– Kotlin convention- implemented additional functions:
filterNot
,filterNotNull
– Kotlin convention - implemented additional function
getOrNull
in addition totoOption
– Kotlin uses its own null-safety mechanisms
Unlike in Scala, this implementation is not right-biased,
i.e. it is not possible to use Either.map {}
instead of Either.right.map {}
.
However, the Scala convention that “dictates that Left
is used for failure and Right
is used for success”
(Scala Standard Library Documentation) is still a preferred way of using this class.
Implementation differences:
foreach
has been replaced withforEach
– Kotlin convention- implemented additional functions:
filterNot
,filterNotNull
– Kotlin convention - implemented additional function
getOrNull
in addition totoOption
– Kotlin uses its own null-safety mechanisms
<dependency>
<groupId>it.czerwinski</groupId>
<artifactId>kotlin-util</artifactId>
<version>0.2</version>
</dependency>
implementation 'it.czerwinski:kotlin-util:0.2'