#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
явно подобными.