【问题标题】:Anylogic: Fill Array values fasterAnylogic:更快地填充数组值
【发布时间】:2017-10-30 19:41:08
【问题描述】:

我确实尝试在模拟开始时从内部数据库表中填充 double[8760] 类型的数组参数。此表具有一年的小时数列和每个参数的列。我的代码正在运行,但处理数据的速度非常慢:

for (int row_counter=0;row_counter<= 8759; row_counter++) {
ProfileParameterA[row_counter] = selectFrom(data)
.where(data.hourofyear.eq(row_counter))
.uniqueResult(data.a, double.class);
ProfileParameterB[row_counter] = selectFrom(data)
.where(data.hourofyear.eq(row_counter))
.uniqueResult(data.b, double.class);    
}

关于如何改进导入以更快地将表的数据加载到参数中的任何建议?

非常感谢。

亨氏-S

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    试试这个:

    ProfileParameterA = selectFrom(data)
        .where(data.hourofyear.eq(row_counter))
        .list(data.a).stream().mapToDouble( d -> d ).toArray();
    
    ProfileParameterB = selectFrom(data)
        .where(data.hourofyear.eq(row_counter))
        .list(data.b).stream().mapToDouble( d -> d ).toArray();
    

    它是Java Stream API 的一部分,便于以函数式风格处理列表、数组、集合。

    【讨论】:

    • 嗨 Gregory,工作正常,谢谢。我只需将代码缩短为: ProfileParameterA = selectFrom(data) .list(data.a).stream().mapToDouble(d -> d).toArray();因为不再有 for 循环。 (猜猜这行得通,因为我的数据已经按我需要的顺序排列了)非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多