Einfach üben/spielen mit Scala-Sammlungen und mit Partials. Obwohl ich nicht herausfinden kann, wie man match für flatMap eintippt, wenn Map einer Liste korrekt zugeordnet wird. Ich bin mir bewusst, es gibt andere Wege (zum Ende springen) nur neugierig, wie das funktionieren würde.Scala Collections Optionales Tuple flatMap
val fours = Map(1 -> 4, 2 -> 8, 3 -> 12)
def greaterTuple(k:Int, v:Int):Option[(Int, Int)] = if(v > 4) Some(k,v) else None
fours.flatMap { case (k,v) => greaterTuple(k,v) } //works
fours.flatMap(x => greaterTuple(x._1, x._2)) //works
fours.map((greaterTuple _).tupled) //works
fours.flatMap((greaterTuple _).tupled)
Error:(27, 56) type mismatch;
found : ((Int, Int)) => Option[(Int, Int)]
required: ((Int, Int)) => scala.collection.GenTraversableOnce[?]
So anders als die Änderung der Funktion Signatur etwas wie
def greaterTuple(t: (Int,Int)):Option[(Int,Int)] = if(t._2 > 4) Some(t) else None
machen alles so einfach
fours.flatMap(greaterTuple)
fours.map(greaterTuple)
oder bevor jemand schlägt vor: inline die ganze Sache einfach nicht mein Punkt
fours.filter(t => t._2 > 4)
Also wie tippst du es als optional ein?
Vielleicht sorgen Sie nicht und nur mit Ausnahme der oben genannten
fours.flatMap { case (k,v) => greaterTuple(k,v) }
** Abgesehen warum gibt es so viel Beschwerde auf t._1/2/etc .. Wenn Sie jemals in den meisten Arbeiten mit einem einzelnes Tupel, um zu einer Funktion zu gelangen. Ich habe das Gefühl, dass es ein Teil der Sprache ist, die wir benutzen sollten, wenn es sonst Sinn macht und idiomatisch ist; Ende schimpfen.
Was ist Ihre Frage? –
Also wie tippst du es als optional ein? – JustDave
Ich habe eine Bearbeitung meiner Antwort gepostet. –