Nói rằng tôi có một chức năng để kiểm tra xem một số hoạt động được áp dụng cho một thể hiện của A và nếu như vậy, trả về một thể hiện của B hoặc None:Scala: lọc một tập hợp các tùy chọn
def checker[A,B](a: A) : Option[B] = ...
Bây giờ tôi muốn để tạo một bộ sưu tập mới chứa tất cả các phiên bản B hợp lệ, hãy bỏ các giá trị None. Đoạn mã sau dường như thực hiện công việc, nhưng chắc chắn có một cách tốt hơn:
val as = List[A](a1, a2, a3, ...)
val bs =
as
.map((a) => checker(a)) // List[A] => List[Option[B]]
.filter(_.isDefined) // List[Option[B]] => List[Option[B]]
.map(_.get) // List[Option[B]] => List[B]
Cảm ơn!
flatMap shit –
@oxbow_lakes Tôi tin rằng báo giá chính xác là: _ "Đây là gì? Giờ nghiệp dư? FlatMap shit!" _ –
Trích dẫn đó có xuất phát trên twitter không? – huynhjl