Kotlin MULTISET收集器
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 的运行时 API 实现了一些有用的 Collectors
,例如,可用于将数据获取到 Map 中
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); } // [...] }
这些可以与 MULTISET 或 MULTISET_AGG 一起使用,如下所示
val map: Field<Map<Int, String>> = multisetAgg(LANGUAGE.ID, LANGUAGE.CD).convertFrom { r -> r.collect(Records.intoMap()) }
Collector
利用了查询的类型安全,因此它仅适用于投影恰好 2 列的查询。 使用 kotlin 扩展模块,可以使用一些有用的扩展函数,如下所示
package org.jooq.kotlin inline fun <reified E> Field<Result<Record1<E>>>.intoArray(): Field<Array<E>> = collecting(Records.intoArray(E::class.java)) fun <K, V, R : Record2<K, V>> Field<Result<R>>.intoGroups(): Field<Map<K, List<V>>> = collecting(Records.intoGroups()) fun <E, R : Record1<E>> Field<Result<R>>.intoList(): Field<List<E>> = collecting(Records.intoList()) fun <K, V> Field<Result<Record2<K, V>>>.intoMap(): Field<Map<K, V>> = collecting(Records.intoMap()) fun <E, R : Record1<E>> Field<Result<R>>.intoSet(): Field<Set<E>> = collecting(Records.intoSet()) // [... and more]
这允许使用下面更简洁的版本
val map: Field<Map<Int, String>> = multisetAgg(LANGUAGE.ID, LANGUAGE.CD).intoMap()
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!