Возможно, вас заинтересует следующее:
val marketTypes = marketsFilter.mapNotNull { market ->
MyApplication.allMarketTypes
.singleOrNull { it.id == market.marketTypeId }
}.distinct().toMutableList()
Возможно, вас заинтересует обратный подход, в основном фильтрующий только типы рынка для идентификаторов фильтра рынка, например:
val marketTypes = MyApplication.allMarketTypes.filter { type -> marketsFilter.any { it.marketTypeId == type.id } }
.toMutableList() // no distinct needed
Вы также можете заменить любой .distinct().toMutableList()
на .toMutableSet()
, если это также соответствует вашим потребностям.
Обратите внимание, если вы проверите свой allMarketTypes
часто вы можете захотеть поместить их в карту, например:
val allMarketTypesMap = allMarketTypes.associateBy { it.id }
Таким образом, ваши дальнейшие отображения станут намного проще, например:
val marketTypes = marketsFilter.mapNotNull { allMarketTypesMap[it.marketTypeId] }
.distinct().toMutableList() // or just .toMutableSet()
Как побочныйПримечание относительно дубликатов в allMarketTypes
(в случае их наличия): associateBy
будет собирать только последние из всех записей с одинаковым идентификатором, в основном отбрасывая дубликаты любого типа рынка.single
, с другой стороны, в основном потерпит неудачу, если существует более одного типа рынка с одинаковым идентификатором или его нет (или если вы используете singleOrNull
, вместо этого он вернет null
).Просто имейте это в виду.