Tengo una Scala Lista de tuplas, clasificada en orden descendente por el primer elemento de la tupla. Intenté algunas operaciones como las que se muestran a continuación, que me pueden devolver algunos elementos de la lista o List()
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()
Quiero escribir un método de utilidad que pueda ajustar y devolver el tipo de opción del primer elemento de la Lista, que será una tupla si filterNot
no ha vaciado la lista a la lista (). Si filterNot
me da Lista (), solo quiero devolver Ninguno. Si filterNot
me devuelve un List
Con los elementos, quiero hacer la opción (l (0)). Puedo hacerlo con chequeos regulares y todo, pero me preguntaba cómo lo hago de una manera más funcional.
Respuestas
4 para la respuesta № 1Una mejor alternativa sería usar List.find
que toma un predicado y devuelve el primer partido:
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
Nota: Invertí el valor menor que a mayor que porque no estamos negando el predicado.