Items
Items 是一个数据预处理序列,类似于 java.util.stream.Stream 或 kotlinx.coroutines.flow.Flow, 但是不完全相同。
在使用 items 的预处理参数时,你不应去重复使用已经被操作过的过时实例。
预处理
Items 中存在部分 预处理 函数:limit、offset、batch。
这些预处理函数的作用可能是单纯的记录参数,如果重复调用会覆盖上一个值而不是真正的流式处理。因此对于这些预处理函数, 如果有需要则应当只调用一次。
这些预处理函数不同于其他流API中的类似api,在simbot中,组件的实现可能会根据这些预处理参数进行一定的优化。 当一个组件底层的api原生的支持精准的分页、分流时,这些参数便会派上用场了。同理,如果底层api无法直接获取全部, 需要分批次获取的时候,batch 则会有效影响到实际的批次数量 ———— 这些都是普通的流API无法满足的。
为了避免实现细节所产生的逻辑差异,对于 预处理 函数,同一个函数你应当至多只调用1次。
转化
Items 中存在部分 转化 函数:asFlow、asSequence、asStream。
转化 函数是一种 终结 函数,它会将当前预处理信息的瞬时信息提供给内部的构建器,并得到一个真正的序列对象。
收集
Items 中存在部分 收集 函数:Items.collectTo 、Items.collectToList 等。
收集 函数是一种 终结 函数,它会将当前预处理信息的瞬时信息提供给内部的构建器,并进行真正的处理逻辑。
与上述 转化 函数类似,收集函数被执行时才会根据预处理参数去真正的构建流实例并进行收集操作。 因此在调用了 收集 函数后,你不应再对之前的 Items 实例进行任何操作。
不论是转化函数还是收集函数,它们都是终结函数,每一个 Items 应当且只能执行一次终结函数,不可复用。
Author
ForteScarlet