Chunk[A]
代表一大块类型为 A 的值。块的设计块通常由数组支持,但向下层元素公开纯函数式的,安全的接口,并且它们对使用数组代价高昂的操作(例如重复级联)采用懒模式。
新建一个块(chunk)
Chunk(1,2,3)
// res0: Chunk[Int] = Chunk.IntArray(1, 2, 3)
块连接(Concatenating):
++
操作返回当前块与指定块的串联块。例如:
Chunk(1,2,3) ++ Chunk(4,5,6)
// res1: Chunk[Int] = Chunk.Concat(1, 2, 3, 4, 5, 6)
块搜集(collecting):
collect
过滤、映射块中的元素并返回新的块。以下是如何使用 collect
函数从Chunk[A]
中挑选所有字符串的例子:
val collectChunk = Chunk("Hello ZIO", 1.5, "Hello ZIO NIO", 2.0, "Some string", 2.5)
// collectChunk: Chunk[Any] = Chunk.AnyRefArray(
// "Hello ZIO",
// 1.5,
// "Hello ZIO NIO",
// 2.0,
// "Some string",
// 2.5
// )
collectChunk.collect { case string: String => string }
// res2: Chunk[String] = Chunk.AnyRefArray(
// "Hello ZIO",
// "Hello ZIO NIO",
// "Some string"
// )
如何使用 collect
函数从 Chunk[A] 中挑选所有数字[A]:
collectChunk.collect { case digit: Double => digit }
// res3: Chunk[Double] = Chunk.DoubleArray(1.5, 2.0, 2.5)
collectWhile
(从左到右)收集元素,直到选择条件首次返回“ false”:
Chunk("Sarah", "Bob", "Jane").collectWhile { case element if element != "Bob" => true }
// res4: Chunk[Boolean] = Chunk.BooleanArray(true)
或者另外一个例子:
Chunk(9, 2, 5, 1, 6).collectWhile { case element if element >= 2 => true }
// res5: Chunk[Boolean] = Chunk.BooleanArray(true, true, true)
块删除(dropping):
drop
函数从块中删除前 n 个元素。
Chunk("Sarah", "Bob", "Jane").drop(1)
// res6: Chunk[String] = Chunk.Slice("Bob", "Jane")
dropWhile
依据条件函数删除所有返回 true 的元素:
Chunk(9, 2, 5, 1, 6).dropWhile(_ >= 2)
// res7: Chunk[Int] = Chunk.Slice(1, 6)
块比较(Comparing):
Chunk("A","B") == Chunk("A", "C")
// res8: Boolean = false
块转换(Converting)
toArray
将一个块转换成 Array。
Chunk(1,2,3).toArray
toSeq
将一个块t转换成 Seq。
Chunk(1,2,3).toSeq