Saya perlu memeriksa apakah ada string dalam daftar, dan memanggil fungsi yang menerima boolean yang sesuai.
Apakah mungkin untuk mencapai ini dengan satu liner?
Kode di bawah ini adalah yang terbaik yang bisa saya dapatkan:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
Saya yakin hal ini dapat dilakukan dengan sedikit pengkodean, tetapi saya tidak tahu caranya!
Dan jika Anda tidak ingin menggunakan persamaan yang tegas, Anda dapat menggunakan keberadaan:
sumber
Lebih mudah!
sumber
Ini harus bekerja juga dengan predikat yang berbeda
sumber
Dalam kasus Anda, saya akan mempertimbangkan untuk menggunakan Set dan bukan Daftar, untuk memastikan Anda hanya memiliki nilai unik. kecuali Anda terkadang perlu menyertakan duplikat.
Dalam kasus ini, Anda tidak perlu menambahkan fungsi pembungkus di sekitar daftar.
sumber
Anda juga dapat mengimplementasikan
contains
metode denganfoldLeft
, itu cukup mengagumkan. Saya suka algoritma foldLeft.Sebagai contoh:
object ContainsWithFoldLeft extends App { val list = (0 to 10).toList println(contains(list, 10)) //true println(contains(list, 11)) //false def contains[A](list: List[A], item: A): Boolean = { list.foldLeft(false)((r, c) => c.equals(item) || r) } }
sumber