Documentation / dataflow / com.femastudios.dataflow.extensions / transform
Go to reference

transform

fun <T> Field<Boolean>.transform(ifTrue: T, ifFalse: T): Field<T>
inline fun <T> Field<Boolean>.transform(crossinline ifTrue: () -> T, crossinline ifFalse: () -> T): Field<T>

Returns a Field that contains ifTrue when the value is true, and ifFalse when the value is false


fun <C : Iterable<T>?, T, O, F> Field<C>.transform(fieldProvider: (T) -> Field<F>, transformer: (IterableSnapshot<T, C, F>) -> O): Field<O>

Takes a snapshot of the iterable and all the Fields captured by fieldProvider.

Then the IterableSnapshot is transformed into O using the given transformer.

It is equivalent to calling f.snapshot(fieldProvider).transform(transformer)

See Also

tuple

IterableSnapshot


fun <C : Iterable<T>?, T, I, O> Field<C>.transform(fieldProvider: (T) -> Field<I>, computer: (iterable: C, T.() -> I) -> O): Field<O>

Takes a snapshot of the iterable and the Field returned by fieldProvider.

The final value is then computed using computer, whose input is the iterable, and a function to access the snapshotted data of each item.

For example:

val movies : Field<List<Movie>> = ...

val sortedMovies = movies.transform({it.name}){ coll, name ->
	coll.sortedBy { it.name() }
}


fun <C : Iterable<T>?, T, I1, I2, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, computer: (iterable: C, T.() -> I1, T.() -> I2) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, I6, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, fieldProvider6: (T) -> Field<I6>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5, T.() -> I6) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, I6, I7, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, fieldProvider6: (T) -> Field<I6>, fieldProvider7: (T) -> Field<I7>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5, T.() -> I6, T.() -> I7) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, I6, I7, I8, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, fieldProvider6: (T) -> Field<I6>, fieldProvider7: (T) -> Field<I7>, fieldProvider8: (T) -> Field<I8>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5, T.() -> I6, T.() -> I7, T.() -> I8) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, I6, I7, I8, I9, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, fieldProvider6: (T) -> Field<I6>, fieldProvider7: (T) -> Field<I7>, fieldProvider8: (T) -> Field<I8>, fieldProvider9: (T) -> Field<I9>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5, T.() -> I6, T.() -> I7, T.() -> I8, T.() -> I9) -> O): Field<O>
fun <C : Iterable<T>?, T, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, O> Field<C>.transform(fieldProvider1: (T) -> Field<I1>, fieldProvider2: (T) -> Field<I2>, fieldProvider3: (T) -> Field<I3>, fieldProvider4: (T) -> Field<I4>, fieldProvider5: (T) -> Field<I5>, fieldProvider6: (T) -> Field<I6>, fieldProvider7: (T) -> Field<I7>, fieldProvider8: (T) -> Field<I8>, fieldProvider9: (T) -> Field<I9>, fieldProvider10: (T) -> Field<I10>, computer: (iterable: C, T.() -> I1, T.() -> I2, T.() -> I3, T.() -> I4, T.() -> I5, T.() -> I6, T.() -> I7, T.() -> I8, T.() -> I9, T.() -> I10) -> O): Field<O>

Takes a snapshot of the iterable and the Fields returned by the fieldProviders.

The final value is then computed using computer, whose input is the iterable, and a function for each snapshotted field to access the data of each item.

For example:

val movies : Field<List<Movie>> = ...

val sortedFilteredMovies = movies.transform({it.name}, { it.year }){ coll, name, year ->
	coll.filter{
		it.year() >= 2000
	}.sortedBy {
		it.name()
	}
}