Kotlin ResultQuery收集器
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 的运行时 API 实现了一些有用的 Collectors
,例如,可用于将数据提取到映射中
public class Records { // [...] public static final <K, V, R extends Record2<K, V>> Collector<R, ?, Map<K, V>> intoMap() { return intoMap(Record2::value1, Record2::value2); } // [...] }
这些可以与 collect()
方法一起使用,如下所示
val map: Map<Int, String> = create.select(LANGUAGE.ID, LANGUAGE.CD) .from(LANGUAGE) .collect(intoMap())
Collector
利用查询的类型安全,因此它仅适用于投影正好 2 列的查询。使用 kotlin 扩展模块,可以使用一些有用的扩展函数,如下所示
package org.jooq.kotlin inline fun <reified E> ResultQuery<Record1<E>>.fetchArray(): Array<E> = collect(Records.intoArray(E::class.java)) fun <K, V, R : Record2<K, V>> ResultQuery<R>.fetchGroups(): Map<K, List<V>> = collect(Records.intoGroups()) fun <E, R : Record1<E>> ResultQuery<R>.fetchList(): List<E> = collect(Records.intoList()) fun <K, V> ResultQuery<Record2<K, V>>.fetchMap(): Map<K, V> = collect(Records.intoMap()) fun <E, R : Record1<E>> ResultQuery<R>.fetchSet(): Set<E> = collect(Records.intoSet())
这允许使用下面更简洁的版本
val map: Map<Int, String> = create.select(LANGUAGE.ID, LANGUAGE.CD) .from(LANGUAGE) .fetchMap()
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!