loicdescotte
5/1/2016 - 5:55 AM

optionalFlatten.md

How to retrieve List("a", "b") from a list of optional values

A very common use case when dealing with options...

Scala

val values = List(Some("a"), None, Some("b")).flatten

Java

List<Optional<String>> optionalValues = Arrays.asList(Optional.of("a"), Optional.empty(), Optional.of("b"));
List<String> values = optionalValues.stream()
                        .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
                        .collect(Collectors.toList());

Kotlin

val values  = listOf("a", null, "b").filterNotNull()

Note : it's different to use null in Kotlin because listOf("a", null, "b")will be infered as a List<String?>, ? is the replacement for Option/Optional in Kotlin and allows to use null safely.