name.remal.java.util.stream.Stream.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of common Show documentation
Show all versions of common Show documentation
Java & Kotlin tools: common
package name.remal
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import java.util.*
import java.util.stream.Collectors
import java.util.stream.Stream
import java.util.stream.StreamSupport
import kotlin.collections.LinkedHashSet
fun emptyStream(): Stream = Stream.of()
fun streamOf(): Stream = Stream.of()
fun streamOf(vararg elements: T): Stream = Stream.of(*elements)
operator fun Stream.plus(other: Stream): Stream = Stream.concat(this, other)
fun Stream.filterNotNull(): Stream = filter { it != null }.uncheckedCast()
fun Stream.filterIsInstance(type: Class): Stream = filter { type.isInstance(it) }.uncheckedCast()
@SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD")
inline fun Stream.filterIsInstance(): Stream = filterIsInstance(R::class.java)
@JvmName("flatMapCollection")
fun Stream.flatMap(mapper: (T) -> Collection): Stream = this.flatMap { mapper(it).stream() }
@JvmName("flatMapIterable")
fun Stream.flatMap(mapper: (T) -> Iterable): Stream = this.flatMap { StreamSupport.stream(mapper(it).spliterator(), false) }
fun Stream.firstOrNull(): T? = findFirst().orNull
fun Stream.asIterable(): Iterable = object : Iterable {
override fun iterator() = [email protected]()
}
fun Stream.toList(): List = collect(Collectors.toList())
fun Stream.toSet(): Set = collect(Collectors.toCollection(::LinkedHashSet))
fun Stream.toHashSet(): Set = collect(Collectors.toCollection(::HashSet))
fun > Stream.toSortedSet(): SortedSet = collect(Collectors.toCollection { TreeSet() })
fun > Stream.toMap(): Map = collect(Collectors.toMap({ it.first }, { it.second }, { _, value -> value }, ::LinkedHashMap))
fun > Stream.toHashMap(): Map = collect(Collectors.toMap({ it.first }, { it.second }, { _, value -> value }, ::HashMap))
fun , V, T : Pair> Stream.toSortedMap(): SortedMap = collect(Collectors.toMap({ it.first }, { it.second }, { _, value -> value }, ::TreeMap))
fun Stream.toMap(keyExtractor: (value: V) -> K): Map = collect(Collectors.toMap(keyExtractor, { it }, { _, value -> value }, ::LinkedHashMap))
fun Stream.toHashMap(keyExtractor: (value: V) -> K): Map = collect(Collectors.toMap(keyExtractor, { it }, { _, value -> value }, ::HashMap))
fun > Stream.toSortedMap(keyExtractor: (value: V) -> K): Map = collect(Collectors.toMap(keyExtractor, { it }, { _, value -> value }, ::TreeMap))
@JvmName("joinCharSequencesToString")
fun Stream.joinToString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = ""): String = collect(Collectors.joining(separator, prefix, postfix))
fun Stream.joinToString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = ""): String = map { "$it" }.joinToString(separator, prefix, postfix)
fun > Stream.max(): T? = max(Comparator.naturalOrder()).orNull
fun > Stream.min(): T? = min(Comparator.naturalOrder()).orNull
fun Stream.reduce(reducer: (first: T, second: T) -> T): T? = collect(Collectors.reducing(reducer)).orNull