序列操纵函数
操纵器 Java SequenceIterator 方法接受多种序列参数,并生成如下面表格中所述的结果序列:
SequenceIterator parse(String val, Sequence.Type type):从字符串字面值 val 或指定的类型构建一个序列;例如:“{1.0, -1.1, 0}”
SequenceIterator map(SequenceIterator positions):从底层序列中提取在提供的序列中指定位置的元素。这些位置应按升序提供(建议使用 filterPos() 或 topPos() 方法获取)
SequenceIterator[] tee():分叉序列迭代器;即为相同的序列创建两个迭代器实例。这些迭代器应一起遍历(在同一个表达式中使用)。返回包含分叉迭代器对的数组
SequenceIterator constant(double val, Sequence.Type type): 构建具有指定类型的双精度常量值 val 的序列
SequenceIterator constant(long val, Sequence.Type type): 构建具有指定类型的长整型常量值 val 的序列
SequenceIterator constant(byte[] val, Sequence.Type type) :构建具有指定类型的字节数组常量值 val 的序列
SequenceIterator concat(SequenceIterator tail) :连接两个序列:例如对于序列 {1,2,3},concat({4,5}) 会生成结果序列 {1,2,3,4,5}。返回结果序列迭代器
SequenceIterator cat(SequenceIterator other):连接两个序列:例如,对于序列 {('a','b','c')},cat({'x','y','z'}) 会生成结果序列 {'ax', 'by', 'cz'}。返回结果序列迭代器
SequenceIterator unique():只将有序输入序列中的唯一元素复制到结果序列中,通过“合并重复项”实现
SequenceIterator normalize():返回归一化的输入序列;即,将每个序列元素除以所有元素平方和的平方根
SequenceIterator thin(long origin, long step):将输入序列复制到结果中,选择具有指定起始位置和步长的元素
SequenceIterator limit(long from, long till):将输入序列中从位置 from 到位置 till 的子序列复制到结果序列中
SequenceIterator reverse():在结果中返回输入序列的逆序
SequenceIterator diff():在结果中返回输入序列中相邻元素对的差值。
SequenceIterator trend():返回结果中的值为 1、-1 或 0,该值由比较元素值对来确定值是上升趋势还是下降趋势(有关详细说明,请参阅 SQL 序列趋势函数页面)。
SequenceIterator repeat(int count):返回结果中输入序列的每个元素重复 n 次。
SequenceIterator stretch(SequenceIterator ts1, SequenceIterator ts2, long filler) :同下
SequenceIterator stretch(SequenceIterator ts1, SequenceIterator ts2, double filler):返回结果中值序列的元素拉伸至 ts1 序列的长度,通过在 ts2 序列中对应的 timestamp 大于 ts1 序列中的 timestamp 时重复值序列的元素来实现。对于 ts2 序列中对应的 timestamp 小于 ts1 序列中的 timestamp 的元素,使用填充值。例如,假设 ts1 = {1,2,3,4,5},ts2 = {2,4},values = {1.1,2.2},filler = 1.0。对于这些输入序列,结果将是 {1.1,2.2,2.2,1.0,1.0}。(此方法可用于计算拆股调整价格,在这种情况下,需要还原拆股的时间序列,计算累积乘积并乘以价格。)
SequenceIterator stretch0(SequenceIterator ts1, SequenceIterator ts2, long filler) :同下
SequenceIterator stretch0(SequenceIterator ts1, SequenceIterator ts2, double filler):返回结果中包含值序列和填充序列的元素,通过在序列 ts2 中与 ts1 中对应的时间戳匹配的位置插入值序列中的元素。对于序列 ts2 中没有在 ts1 中匹配的时间戳的元素,则使用填充值。例如,假设 ts1 = {1,2,3,5},ts2 = {2,3,4},values = {1.1,1.2,1.3} 且 filler = 0.0。对于这些输入序列,结果将是 {0.0,1.1,1.2,1.3,0.0}。
SequenceIterator asofJoin(SequenceIterator ts1, SequenceIterator ts2):返回结果中包含与 ts2 中最接近 ts1 时间戳的值序列中的元素。例如,假设 ts1 = {4,9},ts2 = {1,3,6,10},values = {0.1,0.3,0.6,1.0}。对于这些输入序列,结果将是 {0.3,1.0}。
SequenceIterator cast(Sequence.Type type):返回结果中包含转换为指定类型的序列。
SequenceIterator cross(int firstCrossDirection):返回结果中包含输入序列中穿过零的位置。如果整数参数 first_cross_direction 为正,则结果序列从零以上的第一个交叉点开始;如果为负,则从零以下的第一个交叉点开始;如果 first_cross_direction 为零,则无关紧要,即第一个交叉点可以在零以上或以下。
SequenceIterator extrema(int firstExtremum):在结果中返回输入序列中极值(局部最小值和最大值)的位置。如果整数参数 first_extremum 为正,则结果序列从第一个局部最大值开始;如果为负,则从第一个局部最小值开始;如果 first_extremum 为零,则无关紧要。
SequenceIterator hash() 以及 SequenceIterator hash(SequenceIterator other)
示例
以下是一个示例代码片段,展示了序列操作方法:
public static void windowAggregate(Connection con)
{
con.startTransaction(Database.TransactionType.ReadOnly);
Cursor<Quote> cursor = new Cursor<Quote>(con, Quote.class, "symbol");
for (Quote quote : cursor)
{
SequenceIterator cross = quote.day.map(quote.close.iterator().
windowAggAvg(20).sub(quote.close.iterator().
windowAggAvg(5)).cross(1));
...
}
con.commitTransaction();
}