我有一个基于代理的模拟,其中有一个名为 collection_dailyInfection
的集合其中每天都会出现新感染的数量。该集合看起来有点像这样:
- 第 1 天:0
- 第 2 天:3
- 第 4 天:3
- 第 5 天:6
- 第 6 天:1
- 。 。 .
我现在正在尝试编写一个函数来累加任意特定日期的感染总数。例如:第 6 天-总感染数 = 0+3+3+6+1 = 13。
计算总和的语法是:
double sum( collection, value )
- 返回给定集合中的值的总和。
对于我的特定示例,这将是 double sum( collection_dailyInfection, *value*)
,但我不确定应该在“值(value)”参数中放入什么。有人可以帮我吗?
最佳答案
AnyLogic 提供的用于计算集合统计信息的这些函数(方法)使用了 Java 相当高级的功能:Java 8 中添加的函数式编程内容。因此所需的语法并不明显。主帮助页面(AnyLogic 帮助 --> 参数、变量、集合 --> 集合 --> 收集集合统计信息的函数)有一个指向 UtilitiesCollection
的链接定义这些方法的类。
您有每日感染计数的集合collection_dailyInfection
;假设您在 AnyLogic 中将其指定为集合类 ArrayList
,元素类为 int
,并且您使用循环事件来添加每个模拟日的计数。
因此,您的求和表达式应该是
sum(collection_dailyInfection, c -> c.doubleValue())
c
只是求和所在的当前元素的任意标识符(实际上,此 sum 方法正在循环遍历您的集合),而 ->
是特殊的 Java 8 函数式编程运算符。当您在 AnyLogic 中为集合内容指定 int
类型时,它们实际上存储为 Integer
对象,这些对象是 int
原语的对象版本。 (请参阅任何 Java 教科书来了解这一点。)
因此,每个条目(Integer
对象)都有一个方法 doubleValue
,该方法以 double 形式返回整数值。 (AnyLogic 的 sum
函数需要“value”位为 double
;即实数( float )。)
(anupam691997 的答案是忽略 AnyLogic 上下文的“纯 Java”解决方案。)
关于java - AnyLogic:计算集合中所有值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264896/