Chunk

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
Leave a Reply
Your email address will not be published.
*
*

BACK TO TOP