web-dev-qa-db-ja.com

KotlinでArrayListをフィルター処理して、条件に一致する要素のみを持つようにするにはどうすればよいですか?

私は配列を持っています:

var month: List<String> = arrayListOf("January", "February", "March")

リストをフィルタリングする必要があるので、"January"のみが残ります。

43
Nitt

このコードを使用して、このコードを使用して配列から1月を除外できます。

var month: List<String> = arrayListOf("January", "February", "March")
// to get the result as list
var monthList: List<String> = month.filter { s -> s == "January" }

// to get a string
var selectedMonth: String = month.filter { s -> s == "January" }.single()
63
Nithinlal

コレクションをフィルタリングするための関数がいくつかあります。"January"に一致する値のみを保持する場合は、単純な filter() を使用できます。

val months = listOf("January", "February", "March")

months.filter { month -> month == "January" } // with explicit parameter name
months.filter { it == "January" }             // with implicit parameter name "it"

これらは、"January"のみを含むリストを提供します。

すべての月がnot"January"である場合は、!=を使用して条件を逆にするか、 filterNot()

months.filter { it != "January" }
months.filterNot { it == "January" } 

これらは、"February""March"を含むリストを提供します。

Javaとは異なり、Kotlinで==および!=演算子を使用することは、実際にオブジェクトでequals関数を呼び出すことと同じであることに注意してください。詳細については、 equality に関するドキュメントを参照してください。

標準ライブラリのコレクション関数の完全なリストについては、 APIリファレンスを参照してください

32
zsmb13

月を含む文字列のこのリストをフィルタリングします。

var month : List<String> = arrayListOf("January", "February", "March")

リストの filterNot() メソッドを使用できます。指定された述語を除くすべての要素を含むリストを返します。

var filteredMonthList : List<String> = month.filterNot { s -> s == "January" }
// results:  ["February", "March"]

リストの filter() メソッドを使用できます。指定された述語に一致するすべての要素を含むリストを返します。

var filteredMonthList : List<String> = month.filter { s -> s == "January" }
// results:  ["January"]

filter()の後に single() メソッドを使用すると、1つの値が返され、リストに複数の値がある場合は例外がスローされます。

var filteredMonth : String = month.filter { s -> s == "January" }.single()
// result:  "January"
11
Avijit Karmakar

カスタムリストがあり、それがnullまたは空白であるかどうかを確認すると、Kotlinを1行でチェックできることを共有しています

  fun filterList(listCutom: List<Custom>?) {
    var fiterList = listCutom!!.filter { it.label != "" }
    //Here you can get the list which is not having any kind of lable blank
  }

複数の条件も確認できます

 fun filterList(listCutom: List<Custom>?) {
    var fiterList = listCutom!!.filter { it.label != "" && it.value != ""}
    //Here you can get the list which is not having any kind of lable or value blank
  }

注:label&valueCustom Modelクラスの変数であると想定しています。

6
Mohit Suthar

find またはfindLastを使用することもできます。これは、Stringの場合に返されるfilterのリストではなく、1つの値のみを返すことを特に意図しています。

var month = arrayListOf("January", "February", "March")
var result = month.find { s -> s == "January" }
3
Rishabh876