org.babyfish.jimmer.sql.ast.tuple.Tuple2.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jimmer-sql Show documentation
Show all versions of jimmer-sql Show documentation
A revolutionary ORM framework for both java and kotlin
The newest version!
package org.babyfish.jimmer.sql.ast.tuple
import org.babyfish.jimmer.sql.ast.impl.TupleImplementor
import java.util.function.BiFunction
import java.util.function.Function
data class Tuple2(
val _1: T1,
val _2: T2
) : TupleImplementor {
override fun size(): Int = 2
override operator fun get(index: Int): Any? =
when (index) {
0 -> _1
1 -> _2
else -> throw IllegalArgumentException("Index must between 0 and ${size() - 1}")
}
override fun convert(block: BiFunction): TupleImplementor =
Tuple2(
block.apply(_1, 0),
block.apply(_2, 1),
)
companion object {
/**
* Shortcut method only for java, java8 stream API is too complex
*/
@JvmStatic
fun toMap(tuples: Collection>): Map =
tuples.associateBy({
it._1
}) {
it._2
}
/**
* Shortcut method only for java, java8 stream API is too complex
*/
@JvmStatic
fun toMap(
tuples: Collection>,
valueMapper: Function
): Map =
tuples.associateBy({
it._1
}) {
valueMapper.apply(it._2)
}
/**
* Shortcut method only for java, java8 stream API is too complex
*/
@JvmStatic
fun toMultiMap(
tuples: Collection>
): Map> =
tuples.groupBy({
it._1
}) {
it._2
}
/**
* Shortcut method only for java, java8 stream API is too complex
*/
@JvmStatic
fun toMultiMap(
tuples: Collection>,
valueMapper: Function
): Map> =
tuples.groupBy({
it._1
}) {
valueMapper.apply(it._2)
}
@JvmStatic
@Suppress("UNCHECKED_CAST")
fun projection1(tuples: Collection>) : Collection =
TupleImplementor.projection(tuples, 0) as Collection
@JvmStatic
@Suppress("UNCHECKED_CAST")
fun projection2(tuples: Collection>) : Collection =
TupleImplementor.projection(tuples, 1) as Collection
}
}