Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
20
Task/Stream-merge/Scala/stream-merge-1.scala
Normal file
20
Task/Stream-merge/Scala/stream-merge-1.scala
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
def mergeN[A : Ordering](is: Iterator[A]*): Iterator[A] = is.reduce((a, b) => merge2(a, b))
|
||||
|
||||
def merge2[A : Ordering](i1: Iterator[A], i2: Iterator[A]): Iterator[A] = {
|
||||
merge2Buffered(i1.buffered, i2.buffered)
|
||||
}
|
||||
|
||||
def merge2Buffered[A](i1: BufferedIterator[A], i2: BufferedIterator[A])(implicit ord: Ordering[A]): Iterator[A] = {
|
||||
if (!i1.hasNext) {
|
||||
i2
|
||||
} else if (!i2.hasNext) {
|
||||
i1
|
||||
} else {
|
||||
val nextHead = if (ord.lt(i1.head, i2.head)) {
|
||||
Iterator.single(i1.next)
|
||||
} else {
|
||||
Iterator.single(i2.next)
|
||||
}
|
||||
nextHead ++ merge2Buffered(i1, i2)
|
||||
}
|
||||
}
|
||||
24
Task/Stream-merge/Scala/stream-merge-2.scala
Normal file
24
Task/Stream-merge/Scala/stream-merge-2.scala
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
val i1 = Iterator.tabulate(5) { i =>
|
||||
val x = i * 3
|
||||
println(s"generating $x")
|
||||
x
|
||||
}
|
||||
|
||||
val i2 = Iterator.tabulate(5) { i =>
|
||||
val x = i * 3 + 1
|
||||
println(s"generating $x")
|
||||
x
|
||||
}
|
||||
|
||||
val i3 = Iterator.tabulate(5) { i =>
|
||||
val x = i * 3 + 2
|
||||
println(s"generating $x")
|
||||
x
|
||||
}
|
||||
|
||||
val merged = mergeN(i1, i2, i3)
|
||||
|
||||
while (merged.hasNext) {
|
||||
val x = merged.next
|
||||
println(s"output: $x")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue