From 29857bff0875c43e055e89d34bc0d616d5d7dc4f Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Wed, 29 Jan 2025 00:26:56 +0100 Subject: Load universe from json --- src/main/kotlin/util/iterutil.kt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/kotlin/util/iterutil.kt (limited to 'src/main/kotlin/util/iterutil.kt') diff --git a/src/main/kotlin/util/iterutil.kt b/src/main/kotlin/util/iterutil.kt new file mode 100644 index 0000000..7845b05 --- /dev/null +++ b/src/main/kotlin/util/iterutil.kt @@ -0,0 +1,36 @@ +package moe.nea.ultranotifier.util + + +fun Sequence.duplicatesBy(keyFunc: (T) -> K): Sequence { + return object : Sequence { + override fun iterator(): Iterator { + val observed = HashSet() + val oldIterator = this@duplicatesBy.iterator() + + return object : Iterator { + var next: T? = null + var hasNext = false + override fun hasNext(): Boolean { + if (hasNext) return true + while (oldIterator.hasNext()) { + val elem = oldIterator.next() + val key = keyFunc(elem) + if (observed.add(key)) + continue + hasNext = true + next = elem + } + return hasNext + } + + override fun next(): T { + if (!hasNext()) throw NoSuchElementException() + hasNext = false + val elem = next as T + next = null + return elem + } + } + } + } +} -- cgit