Skip to content

Commit a7484d2

Browse files
committed
updating docs and readme
1 parent b13cbd9 commit a7484d2

File tree

9 files changed

+100
-8
lines changed

9 files changed

+100
-8
lines changed

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ The concept of `EmptyTuple` from Scala 3 is also already present:
245245
tupleOf(1).dropLast() == tupleOf() == emptyTuple()
246246
```
247247

248-
Finally, all these helper functions are also baked in:
248+
Finally, all these tuple helper functions are also baked in:
249249

250250
- `componentX()` for destructuring: `val (a, b) = tuple`
251251
- `dropLast() / dropFirst()`
@@ -257,10 +257,15 @@ Finally, all these helper functions are also baked in:
257257
- `getOrNull(n) / getOrNull(i..j)`
258258
- `getAs<T>(n) / getAs<T>(i..j)`
259259
- `getAsOrNull<T>(n) / getAsOrNull<T>(i..j)`
260-
- `zip`
261260
- `copy(_1 = ..., _5 = ...)`
262261
- `first() / last()`
263262
- `_1`, `_6` etc. (instead of `_1()`, `_6()`)
263+
- `zip`
264+
- `dropN() / dropLastN()`
265+
- `takeN() / takeLastN()`
266+
- `splitAtN()`
267+
- `map`
268+
- `cast`
264269

265270
## Examples
266271

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/DestructuredTupleBuilders.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ import scala.Tuple22
4545

4646
/**
4747
* This file provides a descriptive way to create Tuples using [X].
48+
* Only use [X] to create new Tuples.
49+
* To create Tuples of Tuples, it's recommended to use [t] or [tupleOf] instead as using [X] can lead
50+
* to unexpected results.
4851
*
4952
* For instance:
5053
* ```val yourTuple = 1 X "test" X a```

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/DropFunctions.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ import scala.Tuple22
4747
* This can be done using [dropFirst] and [dropLast].
4848
*
4949
* For example:
50-
* ```val yourTuple: Tuple2<Int, String> = tupleOf(1, "test", a).dropLast()```
50+
* ```kotlin
51+
* val yourTuple: Tuple2<Int, String> = tupleOf(1, "test", a).dropLast()
52+
* ```
5153
*
5254
*/
5355

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/MapTuples.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@ package org.jetbrains.kotlinx.spark.api.tuples
22

33
import scala.*
44

5+
/**
6+
* This file provides map-functions to all Tuple variants.
7+
* Given a tuple `t(a1, ..., an)`, returns a new tuple `t(func(a1), ..., func(an))`.
8+
* Compared to Scala 3, no type mapping can occur in Kotlin, so to create a `TupleX<T1, T2, ...>`
9+
* the user will need to explicitly [cast] the result.
10+
*
11+
* For example:
12+
* ```kotlin
13+
* val myTuple: Tuple4<Int, String, Int, String> = t(1, "3", 2, "4")
14+
* val myStringTuple: Tuple4<String, Int, String, Int> = myTuple.map {
15+
* when (it) {
16+
* is Int -> it.toString()
17+
* is String -> it.toInt()
18+
* else -> error("")
19+
* }
20+
* }.cast<String, Int, String, Int>()
21+
* ```
22+
*/
23+
524
fun <T, R, T1: T> Tuple1<T1>.map(func: (T) -> R): Tuple1<R> = Tuple1<R>(func(this._1()))
625
fun <T, R, T1: T, T2: T> Tuple2<T1, T2>.map(func: (T) -> R): Tuple2<R, R> = Tuple2<R, R>(func(this._1()), func(this._2()))
726
fun <T, R, T1: T, T2: T, T3: T> Tuple3<T1, T2, T3>.map(func: (T) -> R): Tuple3<R, R, R> = Tuple3<R, R, R>(func(this._1()), func(this._2()), func(this._3()))
@@ -24,3 +43,26 @@ fun <T, R, T1: T, T2: T, T3: T, T4: T, T5: T, T6: T, T7: T, T8: T, T9: T, T10: T
2443
fun <T, R, T1: T, T2: T, T3: T, T4: T, T5: T, T6: T, T7: T, T8: T, T9: T, T10: T, T11: T, T12: T, T13: T, T14: T, T15: T, T16: T, T17: T, T18: T, T19: T, T20: T> Tuple20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>.map(func: (T) -> R): Tuple20<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R> = Tuple20<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R>(func(this._1()), func(this._2()), func(this._3()), func(this._4()), func(this._5()), func(this._6()), func(this._7()), func(this._8()), func(this._9()), func(this._10()), func(this._11()), func(this._12()), func(this._13()), func(this._14()), func(this._15()), func(this._16()), func(this._17()), func(this._18()), func(this._19()), func(this._20()))
2544
fun <T, R, T1: T, T2: T, T3: T, T4: T, T5: T, T6: T, T7: T, T8: T, T9: T, T10: T, T11: T, T12: T, T13: T, T14: T, T15: T, T16: T, T17: T, T18: T, T19: T, T20: T, T21: T> Tuple21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>.map(func: (T) -> R): Tuple21<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R> = Tuple21<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R>(func(this._1()), func(this._2()), func(this._3()), func(this._4()), func(this._5()), func(this._6()), func(this._7()), func(this._8()), func(this._9()), func(this._10()), func(this._11()), func(this._12()), func(this._13()), func(this._14()), func(this._15()), func(this._16()), func(this._17()), func(this._18()), func(this._19()), func(this._20()), func(this._21()))
2645
fun <T, R, T1: T, T2: T, T3: T, T4: T, T5: T, T6: T, T7: T, T8: T, T9: T, T10: T, T11: T, T12: T, T13: T, T14: T, T15: T, T16: T, T17: T, T18: T, T19: T, T20: T, T21: T, T22: T> Tuple22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>.map(func: (T) -> R): Tuple22<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R> = Tuple22<R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R>(func(this._1()), func(this._2()), func(this._3()), func(this._4()), func(this._5()), func(this._6()), func(this._7()), func(this._8()), func(this._9()), func(this._10()), func(this._11()), func(this._12()), func(this._13()), func(this._14()), func(this._15()), func(this._16()), func(this._17()), func(this._18()), func(this._19()), func(this._20()), func(this._21()), func(this._22()))
46+
47+
inline fun <reified T1> Tuple1<*>.cast(): Tuple1<T1> = Tuple1<T1>(this._1() as T1)
48+
inline fun <reified T1, reified T2> Tuple2<*, *>.cast(): Tuple2<T1, T2> = Tuple2<T1, T2>(this._1() as T1, this._2() as T2)
49+
inline fun <reified T1, reified T2, reified T3> Tuple3<*, *, *>.cast(): Tuple3<T1, T2, T3> = Tuple3<T1, T2, T3>(this._1() as T1, this._2() as T2, this._3() as T3)
50+
inline fun <reified T1, reified T2, reified T3, reified T4> Tuple4<*, *, *, *>.cast(): Tuple4<T1, T2, T3, T4> = Tuple4<T1, T2, T3, T4>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4)
51+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5> Tuple5<*, *, *, *, *>.cast(): Tuple5<T1, T2, T3, T4, T5> = Tuple5<T1, T2, T3, T4, T5>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5)
52+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6> Tuple6<*, *, *, *, *, *>.cast(): Tuple6<T1, T2, T3, T4, T5, T6> = Tuple6<T1, T2, T3, T4, T5, T6>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6)
53+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7> Tuple7<*, *, *, *, *, *, *>.cast(): Tuple7<T1, T2, T3, T4, T5, T6, T7> = Tuple7<T1, T2, T3, T4, T5, T6, T7>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7)
54+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8> Tuple8<*, *, *, *, *, *, *, *>.cast(): Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> = Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8)
55+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9> Tuple9<*, *, *, *, *, *, *, *, *>.cast(): Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> = Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9)
56+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10> Tuple10<*, *, *, *, *, *, *, *, *, *>.cast(): Tuple10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> = Tuple10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10)
57+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11> Tuple11<*, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> = Tuple11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11)
58+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12> Tuple12<*, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> = Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12)
59+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13> Tuple13<*, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> = Tuple13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13)
60+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14> Tuple14<*, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> = Tuple14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14)
61+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15> Tuple15<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> = Tuple15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15)
62+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16> Tuple16<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> = Tuple16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16)
63+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17> Tuple17<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> = Tuple17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17)
64+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17, reified T18> Tuple18<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> = Tuple18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17, this._18() as T18)
65+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17, reified T18, reified T19> Tuple19<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> = Tuple19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17, this._18() as T18, this._19() as T19)
66+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17, reified T18, reified T19, reified T20> Tuple20<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> = Tuple20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17, this._18() as T18, this._19() as T19, this._20() as T20)
67+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17, reified T18, reified T19, reified T20, reified T21> Tuple21<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> = Tuple21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17, this._18() as T18, this._19() as T19, this._20() as T20, this._21() as T21)
68+
inline fun <reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10, reified T11, reified T12, reified T13, reified T14, reified T15, reified T16, reified T17, reified T18, reified T19, reified T20, reified T21, reified T22> Tuple22<*, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *>.cast(): Tuple22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> = Tuple22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(this._1() as T1, this._2() as T2, this._3() as T3, this._4() as T4, this._5() as T5, this._6() as T6, this._7() as T7, this._8() as T8, this._9() as T9, this._10() as T10, this._11() as T11, this._12() as T12, this._13() as T13, this._14() as T14, this._15() as T15, this._16() as T16, this._17() as T17, this._18() as T18, this._19() as T19, this._20() as T20, this._21() as T21, this._22() as T22)

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/TupleDrop.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@ package org.jetbrains.kotlinx.spark.api.tuples
22

33
import scala.*
44

5+
/**
6+
* This file contains all functions to drop N items from the beginning or end of a Tuple.
7+
* If all items are dropped, the result will be [EmptyTuple].
8+
*
9+
* For example:
10+
* ```kotlin
11+
* tupleOf(1, 2, 3, 4).drop2() == tupleOf(3, 4)
12+
* tupleOf(1, 2, 3, 4).dropLast2() == tupleOf(1, 2)
13+
* ```
14+
*/
15+
516
fun <T1> Tuple1<T1>.drop0(): Tuple1<T1> = Tuple1<T1>(this._1())
617
fun Tuple1<*>.drop1(): EmptyTuple = EmptyTuple
718
fun <T1, T2> Tuple2<T1, T2>.drop0(): Tuple2<T1, T2> = Tuple2<T1, T2>(this._1(), this._2())

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/TupleSplit.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@ package org.jetbrains.kotlinx.spark.api.tuples
22

33
import scala.*
44

5+
/**
6+
* Given a tuple `t(a1, ..., am)`, returns a [Tuple2] of the tuple `t(a1, ..., an)`
7+
* consisting of the first n elements, and the tuple `t(an+1, ..., am)` consisting
8+
* of the remaining elements.
9+
* Splitting at 0 or at n results in `t(t(), myTuple)` or `t(myTuple, t())` respectively.
10+
*
11+
* For example:
12+
* ```kotlin
13+
* t(1, 2, 3, 4, 5).splitAt2() == t(t(1, 2), t(3, 4, 5))
14+
* ```
15+
*/
16+
517
fun <T1> Tuple1<T1>.splitAt0(): Tuple2<EmptyTuple, Tuple1<T1>> = Tuple2<EmptyTuple, Tuple1<T1>>(EmptyTuple, Tuple1<T1>(this._1()))
618
fun <T1> Tuple1<T1>.splitAt1(): Tuple2<Tuple1<T1>, EmptyTuple> = Tuple2<Tuple1<T1>, EmptyTuple>(Tuple1<T1>(this._1()), EmptyTuple)
719
fun <T1, T2> Tuple2<T1, T2>.splitAt0(): Tuple2<EmptyTuple, Tuple2<T1, T2>> = Tuple2<EmptyTuple, Tuple2<T1, T2>>(EmptyTuple, Tuple2<T1, T2>(this._1(), this._2()))

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/TupleTake.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
package org.jetbrains.kotlinx.spark.api.tuples
22

33
import scala.*
4+
5+
/**
6+
* This file contains all functions to take N items from the beginning or end of a Tuple.
7+
* If 0 items are taken, the result will be [EmptyTuple].
8+
*
9+
* For example:
10+
* ```kotlin
11+
* tupleOf(1, 2, 3, 4).take2() == tupleOf(1, 2)
12+
* tupleOf(1, 2, 3, 4).takeLast2() == tupleOf(3, 4)
13+
* ```
14+
*/
15+
416
fun Tuple1<*>.take0(): EmptyTuple = EmptyTuple
517
fun <T1> Tuple1<T1>.take1(): Tuple1<T1> = Tuple1<T1>(this._1())
618
fun Tuple2<*, *>.take0(): EmptyTuple = EmptyTuple

kotlin-spark-api/3.2/src/main/kotlin/org/jetbrains/kotlinx/spark/api/tuples/TupleZip.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import scala.*
44

55
/**
66
* This file provides zip-functions to all Tuple variants.
7-
* Given two tuples, `t(a1, ..., an)` and `t(a1, ..., an)`, returns a tuple
7+
* Given two tuples, `t(a1, ..., an) zip t(a1, ..., an)`, returns a tuple
88
* `t(t(a1, b1), ..., t(an, bn))`. If the two tuples have different sizes,
99
* the extra elements of the larger tuple will be disregarded.
1010
* The result is typed as `TupleX<Tuple2<TA1, TB1>, ..., Tuple2<TAn, TBn>>`.
11-
*
1211
*/
1312

1413
infix fun Tuple1<*>.zip(other: EmptyTuple): EmptyTuple = EmptyTuple

kotlin-spark-api/3.2/src/test/kotlin/org/jetbrains/kotlinx/spark/api/TuplesTest.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,15 @@ class TuplesTest : ShouldSpec({
186186
}
187187

188188
should("Map tuples") {
189-
t(1, 2.toShort(), 3L, 4.0, 5).map {
190-
it.toString()
191-
} shouldBe t("1", "2", "3", "4.0", "5")
189+
t(1, 2.toShort(), 3L, 4.0, 5)
190+
.map { it.toString() }
191+
.shouldBe(
192+
t("1", "2", "3", "4.0", "5")
193+
)
194+
195+
shouldThrow<ClassCastException> {
196+
t(1, "2", 3L).cast<String, Int, Double>()
197+
}
192198
}
193199

194200
should("Take n from tuples") {

0 commit comments

Comments
 (0)