#android #kotlin
#Android #Kotlin
Вопрос:
У меня есть этот класс
class Product(val price: BigDecimal, val tag: String)
Затем я добавляю элементы в этот класс
var products = ArrayList<Product>()
for (i in 1..5) {
products.add(Product((0.25 * i).toBigDecimal(), i.toString()))
}
Теперь я могу просматривать элементы следующим образом
products.forEach {
Log.d("xxx", "price: ${it.price} tag: ${it.tag}")
}
Результаты:
D/xxx: price: 0.25 tag: 1
D/xxx: price: 0.5 tag: 2
D/xxx: price: 0.75 tag: 3
D/xxx: price: 1.0 tag: 4
D/xxx: price: 1.25 tag: 5
Что я пытаюсь сделать, так это найти «цена» с «тегом» = «3» в продуктах.
Я использую этот код, но он выдает меня null
.
var f = products.find { it.tag.equals('3') }
Есть идеи?
Ответ №1:
Ответ уже есть в вашем вопросе.
Вы пытаетесь сохранить тег как "tag" = "3"
, но пытаетесь получить с it.tag.equals('3')
помощью .
Просто вам нужно изменить свой код с помощью it.tag.equals("3")
Замените эту строку
var f = products.find { it.tag.equals('3') }
с помощью этого
var f = products.find { it.tag.equals("3") }
Ответ №2:
Проблема в том, что «3» и «3» разные. ‘3’ — это символ числа 3, а «3» — это строка, содержащая символ 3. equals
Фактически, используя функцию, вы всегда получаете false в предикате из-за неравенства типов String
и Char
. Итак, если вы измените код следующим образом, проблема будет решена:
var f = products.find { it.tag == "3" }
Обратите внимание, что ==
в kotlin есть операторная функция equals
, которая упрощает чтение и запись.