как фильтровать данные в kotlin на основе элемента

#kotlin

Вопрос:

это метод, при котором я получаю список месяцев данных, но когда я пытаюсь отфильтровать два файла, я получаю ошибку компиляции

 override fun onGraphDataLoaded(data: Listlt;GraphDatagt;?) {  Log.d("DATAITEM", data?.size.toString())  var childList: Listlt;GraphDatagt;? = data?.let { it.filter { s -gt; s.isChild amp;amp; t -gt; t.beginningTimegt;0 } }  var parentList: Listlt;GraphDatagt;? = data?.let { it.filter { s -gt; !s.isChild } }  Log.d("DATAITEM", "ChildSize" childList?.size)  Log.d("DATAITEM", "ParentSize" parentList?.size)  }  

это мой класс моделей

 data class GraphData(  @PrimaryKey(autoGenerate = true)  val id: Int = 0,  var beginningTime: Long? = 0L,  var endTime: Long? = 0L,  var isChild: Boolean )  

я хочу отфильтровать данные на основе ischild и beginningTimegt;0, но это показывает ошибку времени компиляции, пожалуйста, помогите мне в этом .

Комментарии:

1. Вероятно, вам следует s -gt; s.isChild только проверять , это означает, что не используйте == оператора при проверке var isChild: Boolean , потому что Boolean это не может быть Int похоже 1 .

2. не могли бы вы, пожалуйста, помочь мне, как фильтровать на основе нескольких условий

Ответ №1:

Вы используете как s, так и t в качестве параметров лямбда. Вы не можете изменить имя лямбда-параметра в середине выражения!

Кроме того, вы сравниваете свойство, обнуляемое, с int. Вам нужно позаботиться о его аннулируемости.

В — третьих, в этом нет необходимости .let -это усложняет линию. Просто отфильтруйте напрямую.

 var childList = data?.filter { it.isChild amp;amp; (it.beginningTime ?: 0) gt; 0 }  

Ответ №2:

Вы должны проверить «Логическую переменную isChild» на «true» или «false».

 override fun onGraphDataLoaded(data: Listlt;GraphDatagt;?) {  Log.d("DATAITEM", data?.size.toString())  var monthList: Listlt;GraphDatagt;? = data?.let { it.filter {s-gt;s.isChild ==ntrue  }  }   

Комментарии:

1. я сделал это, но данные не извлекаются, их загрузка бесконечна, кажется, что фильтрация не происходит

2. спасибо за помощь, но я отредактировал вопрос, на самом деле я хочу сделать скругление на основе двух параметров

3. Это работает, но s.isChild само по себе является допустимым логическим выражением, не == true требуется. Единственное место, где == true это имело бы смысл, — это если вы имеете дело с обнуляемым Boolean? (что здесь не так). Поэтому я бы не советовал сравнивать с true явно подобными.