KProperty1 (Kotlin) - PullRequest
       4

KProperty1 (Kotlin)

0 голосов
/ 12 июля 2020

Объясните мне кое-что ... У меня есть модель:

data class Book (val title: String, val id: Int)

MutableList:

var books = mutableListOf<Book>()

Я хочу заполнить textView.text из изменяемых книг, поле "title"

Handler(Looper.getMainLooper()).post {
    textView.text = books.map { Book ::title }.reduce { acc, s ->  "$acc\n$s"}.toString()
}

В финале у меня ошибка (отмечено «уменьшить»):

None of the following substitutions
receiver: Iterable<KProperty1<Book, String>>  arguments: ((Any, KProperty1<Book, String>) -> Any)
receiver: Iterable<KProperty1<Book, String>>  arguments: ((KProperty1<Book, String>, KProperty1<Book, String>) -> KProperty1<Book, String>)
can be applied to
receiver: List<KProperty1<Book, String>>  arguments: ((KProperty1<Book, String>, KProperty1<Book, String>) -> String)

Как решить эту проблему

1 Ответ

3 голосов
/ 12 июля 2020

Если вы используете функцию карты, передавая буквальную функцию, не заключайте ее в лямбда, потому что тогда вы передаете функцию, которая просто возвращает функцию, ничего не делая.

Итак, измени От

books.map { Book ::title }

до

books.map(Book::title)

Кроме того, уже существует функция joinToString, которую вы можете использовать, которая проще, чем использование reduce для создания одной строки из Iterable. Вы можете использовать это так:

books.map(Book::title).joinToString("\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...