কীভাবে তালিকার বাইরে থাকা [বিকল্প] ফিল্টার করবেন?


105

List[Option[A]]স্ক্যালায় আমার যদি একটি থাকে তবে Noneমানগুলি ফিল্টার করার মূর্তিযুক্ত উপায় কী?

একটি উপায় নিম্নলিখিত ব্যবহার করা হয়:

val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)

আরও কি "আইডোমেটিক" উপায় আছে? এটি বেশ সহজ বলে মনে হচ্ছে না।


1
সম্পর্কিত: stackoverflow.com/questions/4730842/...
dskrvk

উত্তর:


161

আপনি যদি একই সময়ে বিকল্পগুলি থেকে মুক্তি পেতে চান তবে আপনি এটি ব্যবহার করতে পারেন flatten:

scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)

23
আমি যোগ হবে flatMapআর অন্য তালিকা উপাদান প্রক্রিয়া করতে ব্যবহার করা যেতে পারে Noneএস, অনুরূপ someList.flatten.map, যেমন এক প্রায়ই এবং এই উপাদানগুলির কাজ করতে চায় শুধু flattenমজা বাইরে তালিকা।
ফ্রাঙ্ক

হ্যাঁ, ফিল্টারড তালিকাটি নিয়ে তিনি কী করবেন বলে আমি রাফকে জিজ্ঞাসা করতে দ্বিধা বোধ করি। তবে এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে আপনি কেবল চ্যাপ্টা করতে চান।
নিকোলাস

কখনও কখনও আমি Optionঅবজেক্টগুলির বিষয়বস্তু পুনরুদ্ধার করতে চাই , তবে অন্য সময়গুলি এগুলি হিসাবে থাকা প্রয়োজন Option[A]Option[A]শীতল বৈশিষ্ট্যের জন্য আমি আরও এবং আরও বেশি ব্যবহার খুঁজে পাচ্ছি ।
রাল্ফ

এখানে কি সমতুল্য ফ্ল্যাটফোর্যাচ টাইপ পদ্ধতি আছে?
সিডিএমকেই

1
যদি আপনি সংগ্রহটি পরিবর্তনযোগ্য না হন তবে ফল্টম্যাপটি কৌশলটি করবে। যদি আপনার সংগ্রহটি পরিবর্তনযোগ্য হয়, না, নেই।
নিকোলাস


2

catsলাইব্রেরি রয়েছে flattenOption, যা সক্রিয় কোনো F[Option[A]]একটি বা F[A](যেখানে F[_]একটি হল FunctorFilter)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.