filter
требует предиката, возвращающего логическое значение. Смотрите декларацию:
public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
return filterTo(ArrayList<T>(), predicate)
}
(T) -> Boolean
означает, что он возвращает логическое значение и принимает входные данные типа T. T
в этом случае it
.
Строка не является логическим значением. Если у вас действительно есть список логических значений, вы можете сделать это:
val list = listOf(true, true, false, true, true, false )
val sortedList = list.filter{ it }
и это будет допустимо, потому что это логическое значение. Однако для всех других типов вам необходимо преобразовать его в логическую операцию, если вы собираетесь выполнять фильтрацию.
Однако, поскольку вы, кажется, на самом деле не делаете никакой фильтрации, просто удалите ее и сделайте следующее:
val sortedList = spices.sortedBy { it.length }
и если вам нужно как-то его отфильтровать, убедитесь, что вы получили логическую операцию или значение.
Чтобы на самом деле отсортировать это, вы должны сделать что-то со значением sortedBy
В моем примере я назначаю его новому полю, но вы также можете назначить его предыдущему полю. Однако, если вы сделаете это, вы должны сделать это var
, а не val
.