2016-10-19 4 views
2

folgende gegeben:Scala: Concatonate zwei Instanzen Option [Liste]

val l1 = Some(List(1)) 
val l2 = Some(List(2)) 

ich zu verketten l1 und l2 möchte, damit ich ein List(1, 2) oder Nil, wenn beide Optionen gleich None sind.

Ich bin glücklich scalaz zu verwenden, wenn es dort eine elegante Lösung.

Antwort

3

l1.getOrElse(Nil) ::: l2.getOrElse(Nil)

+0

Kann glauben, dass ich nicht darüber nachgedacht habe! – rodoherty1

2

Es gibt auch diese Option:

List(l1, l2).flatMap(_.toList).flatten 

, die leicht für eine beliebige Anzahl von Option[List[_]] Werte verwendet werden können

0

cats Bibliothek ist viel einfacher, wenn Sie die Klasse semigroup Typ verwenden

import cats._ , cats.implicits._ , cats.instances._ 

scala> Option(List(3)) |+| Option(List(5)) 
res0: Option[List[Int]] = Some(List(3, 5)) 

scala> Option(List(3)) |+| None 
res1: Option[List[Int]] = Some(List(3))