Как я могу отфильтровать ArrayList в Kotlin, чтобы у меня были только элементы, соответствующие моему состоянию?

У меня есть массив:

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

Я должен отфильтровать список, чтобы у меня остался только "January".

Ответ 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()

Ответ 2

Существует множество функций для фильтрации коллекций, если вы хотите сохранить только значения, соответствующие "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".

Если вы хотите, чтобы все месяцы не были "January", вы можете отменить это условие с помощью != или использовать filterNot()

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

Они предоставят вам список, содержащий "February" и "March".

Обратите внимание, что в отличие от Java, использование операторов == и != в Kotlin фактически совпадает с вызовом функции equals на объектах. Подробнее см. В документах equality.

Полный список функций коллекции в стандартной библиотеке приведен в ссылке API.

Ответ 3

Вы хотите отфильтровать этот список строк, содержащих месяцы.

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() он вернет одно значение и сгенерирует исключение, если в списке будет более одного значения.

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

Ответ 4

Я просто общаюсь, если у вас есть настраиваемый список и проверьте, является ли он нулевым или пустым, вы можете проверить в Kotlin в одной строке Просто сделайте это так.

  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
  }

Примечание. Я предполагаю, что метка и значение являются переменными класса Пользовательский.

Ответ 5

Вы также можете использовать find или findLast. Это специально предназначено для возврата только одного значения вместо списка String возвращаемого в случае filter.

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