From ee453a084ae6f2e0f53c4a75af1323ebede4e554 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 9 May 2022 12:55:05 +0200 Subject: [PATCH] [jOOQ/jOOQ#13538] Add a Field>.collecting(Collector) kotlin extension function, and similar --- .../main/kotlin/org/jooq/kotlin/Extensions.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt b/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt index 8fbb2ec8fe..c9485957c6 100644 --- a/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt +++ b/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt @@ -2,6 +2,43 @@ package org.jooq.kotlin import org.jooq.* import org.jooq.impl.DSL.* +import java.util.stream.Collector + +// ---------------------------------------------------------------------------- +// Extensions to collect Field> into other types +// ---------------------------------------------------------------------------- + +fun Field>.collecting(collector: Collector): Field = convertFrom { it.collect(collector) } + +inline fun Field>>.intoArray(): Field> = collecting(Records.intoArray(E::class.java)) + +inline fun Field>.intoArray(noinline mapper: (R) -> E): Field> = collecting(Records.intoArray(E::class.java, mapper)) + +fun > Field>.intoGroups(): Field>> = collecting(Records.intoGroups()) + +fun Field>.intoGroups(keyMapper: (R) -> K): Field>> = collecting(Records.intoGroups(keyMapper)) + +fun Field>.intoGroups(keyMapper: (R) -> K, valueMapper: (R) -> V): Field>> = collecting(Records.intoGroups(keyMapper, valueMapper)) + +fun > Field>.intoList(): Field> = collecting(Records.intoList()) + +fun Field>.intoList(mapper: (R) -> E): Field> = collecting(Records.intoList(mapper)) + +fun Field>>.intoMap(): Field> = collecting(Records.intoMap()) + +fun Field>.intoMap(keyMapper: (R) -> K): Field> = collecting(Records.intoMap(keyMapper)) + +fun Field>.intoMap(keyMapper: (R) -> K, valueMapper: (R) -> V): Field> = collecting(Records.intoMap(keyMapper, valueMapper)) + +fun Field>.intoResultGroups(keyMapper: (R) -> K): Field>> = collecting(Records.intoResultGroups(keyMapper)) + +fun Field>.intoResultGroups(keyMapper: (R) -> K, valueMapper: (R) -> V): Field>> = collecting(Records.intoResultGroups(keyMapper, valueMapper)) + +fun > Field>.intoSet(): Field> = collecting(Records.intoSet()) + +fun Field>.intoSet(mapper: (R) -> E): Field> = collecting(Records.intoSet(mapper)) + + // ---------------------------------------------------------------------------- // Extensions to map Field> to more convenient Field>