Предположим, у нас есть следующий код:
@ExperimentalCoroutinesApi
fun ProducerScope<DownloadableDataDto<out User>>.findInteresting(input: ReceiveChannel<DownloadableDataDto<out User>>,
communitiesCount: Int,
userCountMap: MutableMap<User, Int> = ConcurrentHashMap()) = createProducer(input) {
if (userCountMap.compute(it.data!!) { _, value ->
if (value == null) 1 else value + 1
} == communitiesCount) send(it)
}
Этот код проверяет, является ли пользователь частью всех сообществ communitiesCount
.Но эта логика заключена внутри функции createChannel()
высшего порядка, которую я не хотел бы проверять в данный момент.Есть ли способ проверить только внутренности?Я предполагаю, что мог бы, вероятно, извлечь это и в отдельную функцию, верно?
И если я сделаю это таким образом, скажем, у нас вместо этого есть:
@ExperimentalCoroutinesApi
fun ProducerScope<DownloadableDataDto<out User>>.findInteresting(input: ReceiveChannel<DownloadableDataDto<out User>>,
communitiesCount: Int,
userCountMap: MutableMap<User, Int> = ConcurrentHashMap()) = createProducer(input) {
sendIfInteresting(it, communitiesCount, userCountMap)
}
@ExperimentalCoroutinesApi
private suspend fun ProducerScope<DownloadableDataDto<out User>>.sendIfInteresting(userDto: DownloadableDataDto<out User>,
communitiesCount: Int,
userCountMap: MutableMap<User, Int>) {
if (userCountMap.compute(userDto.data!!) { _, value ->
if (value == null) 1 else value + 1
} == communitiesCount) send(userDto)
}
Как бы я высмеялsend(userDto)
звонок?Я могу издеваться над объектом ProducerScope
, но как бы я вызвал настоящий метод sendIfInteresting()
?