2017-09-23 1 views
1

J'ai une liste de tuples scala, triée par ordre décroissant du premier élément du tuple. J'ai essayé quelques opérations comme ci-dessous qui peut me renvoyer quelques éléments de la liste ou List()Option de retour de (Int, Int) dans scala à partir d'une liste [Int, Int]

scala> val l = List((95,6),(10,2),(8,5)) 
l: List[(Int, Int)] = List((95,6), (10,2), (8,5)) 

scala> l.filterNot({case (x,y)=>x/5<2}) 
res6: List[(Int, Int)] = List((95,6), (10,2)) 

scala> l.filterNot({case (x,y)=>x/5<200}) 
res7: List[(Int, Int)] = List() 

Je veux écrire une méthode utilitaire qui peut envelopper et retourner le type d'option du premier élément de la liste qui sera un tuple si filterNot n'a pas vidé la liste dans List(). Si filterNot me donne List(), je veux juste retourner None. Si filterNot me renvoie un List avec des articles, je veux faire Option (l (0)). Je peux le faire avec des vérifications régulières et tout, mais je me demandais comment je le fais de manière plus fonctionnelle?

+2

'Some (l (0))' ou 'None' est' l.headOption', btw –

Répondre

4

Une meilleure alternative serait d'utiliser List.find qui prend un prédicat et renvoie le premier match:

scala> l find { case (x, y) => x/5 >= 2 } 
res5: Option[(Int, Int)] = Some((95,6)) 

scala> l find { case (x, y) => x/5 >= 200 } 
res6: Option[(Int, Int)] = None 

note I renversé moins que de plus que parce que nous ne sommes pas nier le prédicat.

+0

Vous voulez> =, pas>. – HTNW

+0

@HTNW Woops, raté ça, merci! –