#kotlin #collections
#kotlin #Коллекции
Вопрос:
У меня есть список целых чисел:
// List<Int>
val listOfInts = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
и я хочу преобразовать это в другое List<String>
, где у него есть только нечетные числа, такие как:
// List<String>
val listOfStrings = listOf("1", "3", "5", "7", "9")
Пробовал:
fun convertIntListToStringList(listOfInts: List<Int>): List<String> {
return listOfInts.map{
if (it.rem(2) == 0) it.toString()
}
}
Комментарии:
1. Поскольку вы хотите нечетное значение, оно должно быть! = 0
2. Другим решением является использование mapNotNull .
listOfInts.mapNotNull{ if (it.rem(2) == 0) it.toString() else null; }
3. @Todd
mapNotNull
применяется к результату лямбда-выражения, а не к входному списку. @JTejedor также:mapNotNull{ it.takeIf { it % 2 == 0 } }
. Но ИМО лучше избегать использования нулей для потока, если это возможно.
Ответ №1:
Попробуйте: listOfInts.filter { it % 2 == 1 }.map { it.toString() }
Комментарии:
1. Да — также все функции сбора, такие как
map
,filter
и т. Д., Создают новые списки, За исключением тех,to
в которых указано их имя (mapTo
,filterTo
и т. Д.), Которые помещают результаты в изменяемую коллекцию, которую вы предоставляете