Как встроить карту функций в объекты Flux или Mono в Kotlin и Project Reactor - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь разработать демонстрационное приложение, используя Kotlin и Project Reactor, и я хочу встроить некоторые функции, такие как map, в такие объекты, как Flux или Mono.

Я сделал это так:

private inline fun Flux<Account>.map(noinline transformer: (Account) -> AccountDTO): Flux<AccountDTO> {
    return this.map(transformer)
}

но это не нормально, потому что я получаю следующее предупреждение от IDEA:

Expected performance impact of inlining 'private open inline fun Flux<Account>.map(noinline transformer: (Account) -> AccountDTO): Flux<AccountDTO> defined in com.freesoft.reactiveaccountservice.api.controller.AccountController' is insignificant. Inlining works best for functions with parameters of functional types.

Кто-нибудь знает, как я могу реализовать эти встроенные функции или если это имеет значение дляреализовать это?

Tx!

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Поскольку вы просто вызываете неподписанный map, определенный в Java, выгоды не будет.В принципе, вы можете взглянуть на определение Java, перевести его на Kotlin и сделать его своим встроенным map определением, но (не проверяя) я бы ожидал, что это будет что-то вроде return new MapFlux(...), которое, вероятно, победило 'Это также не выгодно, потому что лямбда должна храниться в поле.

Так что вам нужно переопределить значительную часть библиотеки в Котлине.

2 голосов
/ 19 мая 2019

Обычно вы хотите встроить лямбда функции, которые передаются в функции высшего порядка , потому что это уменьшает накладные расходы времени выполнения.Никакие анонимные классы и ссылочные объекты функций не будут созданы во время выполнения, когда вы встраиваете лямбды.В вашем случае встраивание не повышает производительность, потому что это обычная функция.Вы можете прочитать полное объяснение с примерами здесь

...