Разный кусок кода

map reduce

Преобразовать один список бит в один список строк и резюмировать список строк
в строке, содержащей конкатенацию. Как залогировать запрос, отправленный (requestBodyContent:byte[])

log.info(
    requestBodyContent!!.map { it.toInt().toChar().toString() }
        .reduce { request: String, s: String -> request + s }
)

функциональный интерфейс и ссылка на метод

Можно преобразовать сущность в модель домена DTO с помощью метода-ссылки (функциональный стиль- java 8)

fun findAllByLoginNot(
        pageable:Pageable,
        login:String)
    :Page<UserDto> {
    return userDao.findAllByLoginNot(
                    pageable,
                    login).map(::fromEntity)
}

однаhttps://stackoverflow.com/a/22245383/837404[хорошее объяснение]

Захватить стандартный вывод

package functional

import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals


class BasicsHOF {
    private val standardOut: PrintStream? = out
    private val outputStreamCaptor = ByteArrayOutputStream()

    @BeforeTest
    fun setUp() = setOut(PrintStream(outputStreamCaptor))

    @AfterTest
    fun tearDown() = setOut(standardOut)

    @Test
    fun `three times dope`() {

        3.times { println("Hello") }

        assertEquals(
            buildString {
                repeat(3) { append("Hello\n") }
                deleteAt(length - 1)
            }, outputStreamCaptor
                .toString()
                .trim()
        )
    }

    fun Int.times(fn: () -> Unit) = (1..this).forEach { _ -> fn() }
}

Чем в Kotlin отличаются apply, run, let, also, use и with ?

Сравнение функций Kotlin и использование форм лямбда Reference

применить

Введение Функции Kotlin`apply`, run, let, also, use, et `with`Предлагают разные способы обработки объектов. Каждая имеет свои варианты использования и поведение. Кроме того, формы ссылок на лямбда позволяют сделать код более читаемым и повторно используемым, ссылаясь на существующие лямбда-функции.

Функция`apply`используется для настройки объекта во время его создания. Она возвращает объект, на котором она вызывается.

Пример со ссылкой на lambda :

val someObject = SomeClass().apply(::configureObject)

Пример с lambda :

val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}

run

Функция`run`используется для выполнения блока кода над объектом и возвращает результат блока кода.

Пример с lambda reference :

val result = someObject.run(::someFunction)

Пример с lambda :

val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

laissez

Функция`let`используется для выполнения блока кода над объектом и возвращает результат блока кода.

Пример со ссылкой на lambda

val result = someObject.let(::processObject)

Пример с lambda :

val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

также

Функция`also`используется для выполнения дополнительного действия с объектом и возвращает объект, на котором она вызывается.

Пример с lambda reference :

someObject.also(::performAdditionalAction)

Пример с lambda :

someObject.also {
// action additionnelle sur someObject
}

use

Функция`use`используется для работы с ресурсами, которые должны быть закрыты после использования. Она автоматически вызывает функцию`close`в конце блока.

Пример с лямбда-ссылкой :

someResource.use(::useResource)

Пример с lambda :

someResource.use {
// travailler avec la ressource
}

с

Функция`with`используется для вызова нескольких методов у объекта без повторения его имени и возвращает результат последнего выражения.

Пример с lambda reference :

val result = with(someObject, ::processWithObject)

Пример с lambda :

val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}

Используя формы lambda reference или блоки`{}`, вы можете инкапсулировать логику в отдельные функции, тем самым улучшая читаемость и переиспользуемость кода.

let Function в Kotlin

Ли let возвращает объект с применёнными к нему побочными эффектами или в начальном состоянии входа в зависимости от (let) ?

Функция`let`В Kotlin используется для выполнения операций над объектом и возврата другого результата. Однако важно отметить, что функция`let`не изменяет начальное состояние объекта, на котором она вызывается

Подпись inline fun <T, R> T.let(block: (T) → R): R
использование Функция`let`Обычно используется для применения преобразований к объекту и получения результата, основанного на этих преобразованиях.
Результат Значение, возвращаемое функцией`let`является результатом лямбда-выражения, переданного в качестве аргумента, обычно результатом операций, выполненных над объектом.
Пограничные эффекты Хотя функция`let`может иметь побочные эффекты на объекте, когда она используется в лямбда-выражении, она не изменяет исходное состояние самого объекта

Таким образом, функция`let`является элегантным способом выполнять операции над объектом, одновременно получая производный результат, сохраняя при этом целостность исходного объекта.

Похожие статьи