Size: a a a

Kotlin Community

2020 April 06

AL

Alexander Levin in Kotlin Community
Fly N
Пытаюсь сделать как-то покрасивее с помощью функций kotlin stdlib- есть 2 списка элементов, первый состоит из элементов, одним из свойств которого является элемент из второго списка. Мне нужно смержить их, пока кроме forEach/onEach не придумал
val second = secondList.toSet()
val result = firstList.filter { it.someProperty in second }
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
я с таким просто не встречался, но если я правильно понимаю суть в том, чтобы сереализовать коллбэк, послать его на сервер, там его выполнить и вернуть результат?
так что ли?
Да, простая передача объекта разрешается любым сериализатором (единтвенная проблема сделать его кросс-платформой). Но тут вы ограничиваете себя только сериализуемыми объектами. Если вам надо передать функцию - вот тут засада.
источник

AN

Alexander Nozik in Kotlin Community
Ну и проблему удаленного состояния никто не отменял.
источник

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
Да, простая передача объекта разрешается любым сериализатором (единтвенная проблема сделать его кросс-платформой). Но тут вы ограничиваете себя только сериализуемыми объектами. Если вам надо передать функцию - вот тут засада.
А где-то есть такая реализация rpc вообще?
Чтобы колбэки поддерживала?
Без захвата локальных переменных это вроде не так сложно, а с захватом есть реализации?
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
А где-то есть такая реализация rpc вообще?
Чтобы колбэки поддерживала?
Без захвата локальных переменных это вроде не так сложно, а с захватом есть реализации?
Попытки были, но по-моему ничего рабочего.
источник

FN

Fly N in Kotlin Community
Alexander Levin
val second = secondList.toSet()
val result = firstList.filter { it.someProperty in second }
Немного не то
источник

FN

Fly N in Kotlin Community
Alexander Levin
val second = secondList.toSet()
val result = firstList.filter { it.someProperty in second }
Нужно засетить второй список в первый
источник

AL

Alexander Levin in Kotlin Community
Fly N
Нужно засетить второй список в первый
А на мелком примере можно точнее, что хочется?
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
А где-то есть такая реализация rpc вообще?
Чтобы колбэки поддерживала?
Без захвата локальных переменных это вроде не так сложно, а с захватом есть реализации?
без захвата переменных кстати тоже не просто. Надо гарантировать, что код на обоих машинах одинаковый или передавать его как-то
источник

FN

Fly N in Kotlin Community
Alexander Levin
А на мелком примере можно точнее, что хочется?
Есть например List<Contact>. У Contact есть проперти var publicProfile: PublicProfile? = null. Я получаю List<PublicProfile> и мне по условию (например по id) нужно второй список "разкидать" по List<Contact>
источник

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
без захвата переменных кстати тоже не просто. Надо гарантировать, что код на обоих машинах одинаковый или передавать его как-то
Так это та же проблема с версионированием, как когда сервер и клиент имеют разные версии (например мобильное приложение медленно обновляется)
Если на котлине, то держать один код одинаковым на всех платформах не так сложно
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
Так это та же проблема с версионированием, как когда сервер и клиент имеют разные версии (например мобильное приложение медленно обновляется)
Если на котлине, то держать один код одинаковым на всех платформах не так сложно
Мультиплатформа это упрощает. Но опять же это очень ограниченная передача. Посмотрим, что у нас получится
источник

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
Мультиплатформа это упрощает. Но опять же это очень ограниченная передача. Посмотрим, что у нас получится
а есть где почитать, что вообще в итоге должно получиться?
интересно, в особенности вообще необходимость callback-ов в RPC, мне кажется, от них достаточно легко избавиться и нужны они только для совсем редких кейсов
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
а есть где почитать, что вообще в итоге должно получиться?
интересно, в особенности вообще необходимость callback-ов в RPC, мне кажется, от них достаточно легко избавиться и нужны они только для совсем редких кейсов
Для прилодух они не нужны. Они нужны когда вы хотите реально удаленный вызов делать. Распределенные и полиглотные системы. https://internship.jetbrains.com/projects/564/
источник

AN

Alexander Nozik in Kotlin Community
Для приложух и grpc отлично работает
источник

AL

Alexander Levin in Kotlin Community
Fly N
Есть например List<Contact>. У Contact есть проперти var publicProfile: PublicProfile? = null. Я получаю List<PublicProfile> и мне по условию (например по id) нужно второй список "разкидать" по List<Contact>
Опять-таки, очень много просторов для фантазии. Поскольку вам менять надо, а не возвращать что-то новое, то forEach это нормально:

fun main() {
 val contacts = listOf(Contact(1), Contact(2), Contact(4))
   val profiles = listOf(PublicProfile(1), PublicProfile(3), PublicProfile(4))
   println(contacts)
   populateContacts(contacts, profiles, { it.id }, { it.id })
   println(contacts)
}

data class Contact(val id: Long, var publicProfile: PublicProfile? = null)
data class PublicProfile(val id: Long)

fun <T> populateContacts(contacts: List<Contact>, profiles: List<PublicProfile>, contactSelector: (Contact) -> T, profileSelector: (PublicProfile) -> T) {
   val idToContacts = contacts.associateBy(contactSelector)
   val idToProfiles = profiles.associateBy(profileSelector)
   idToProfiles.forEach { (id, profile) -> idToContacts[id]?.let { it.publicProfile = profile }}
}
источник

LS

Lev Shagalov in Kotlin Community
Как в mockk проверить вызов метода при этом не важно какой аргумент был туда передан?
источник

AL

Anton Lakotka in Kotlin Community
используй any() verify { foo.bar(any()) }
источник

AL

Alexander Levin in Kotlin Community
Lev Shagalov
Как в mockk проверить вызов метода при этом не важно какой аргумент был туда передан?
источник

LS

Lev Shagalov in Kotlin Community
Anton Lakotka
используй any() verify { foo.bar(any()) }
Спасибо
источник