2015-03-06 15 views
5

Tôi có một kết quả bao gồm một danh sách các Vectơ trong sự phân chia scalaz và tôi muốn có thể kiểm tra và lọc ra các phần tử từ bên phải.Giá trị lọc ở phía bên phải của sự phân chia scalaz

ví dụ đơn giản:

import scalaz._ 
import Scalaz._ 

type TL = Throwable \/ List[Vector[Int]] 

val goodTL: TL = \/-(List(Vector(1,2,3),Vector(), Vector(2,3,4))) 

Nếu tôi muốn loại bỏ phần tử rỗng và cũng có giá trị = 2 từ các yếu tố dân cư tôi có thể làm như sau:

for { 
    v <- goodTL 
    f = v.flatten 
} yield for { 
    i <- f 
    if i != 2 
} yield i 

đưa ra một scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4)) đó là những gì Tôi muốn nhưng tôi muốn biết nếu có một cách ít phức tạp hơn để đạt được điều này.

Trả lời

3

Phiên bản của bạn desugars một cái gì đó rất tương tự như sau:

goodTL.map(_.flatten.filter(_ != 2)) 

Đây là một trường hợp cá nhân tôi tìm thấy phiên bản không đường rõ ràng hơn rất nhiều về những gì đang xảy ra.

+0

Đường miễn phí chắc chắn đẹp hơn. Cảm ơn. – Gavin

Các vấn đề liên quan