Я предлагаю пометить каждый параметр в Collection
, который вы получаете от Java, как обнуляемые (если, конечно, вы не знаете, что это никогда не может быть null
:
val floats: List<Float?> = someJavaClass.getFloats()
Тогда выможет отфильтровать null
s и выполнить операцию на карте:
val newFloats: List<Float> = floats
.filter { it != null }
.map { it + 1 }
Имейте в виду, что каждая операция filter
, map
(и т. д.) будет выполнять итерацию всей коллекции и создавать новуюна каждый раз. Вам лучше использовать Sequence
s, которые повторяются лениво.
Как уже упоминалось в комментариях, можно использовать filterNotNull
для прямой фильтрации всех нулевых значений:
val newFloats: List<Float> = floats
.filterNotNull()
.map { it + 1 }
и mapNotNull
для хранения только тех значений, которые map-функция не возвращает null
, это также устраняет filterNotNull
:
val newFloats: List<Float> = floats
.mapNotNull { it?.plus(1) }
Другая конструкция, которую я могу придумать, работает с вашимпример, хотя он очень нечитабелен и просто сложен. Но вот он:
val strHistory = localHistory
.mapNotNull { decoration.decoratedValue(ref.format, it ?: return@mapNotNull null) }