Эти функции (методы), предоставляемые AnyLogic для расчета статистики по коллекциям, используют довольно продвинутую особенность Java: элементы функционального программирования, добавленные в Java 8. Таким образом, требуемый синтаксис совсем не очевиден. На главной странице справки (Справка AnyLogic --> Параметры, переменные, коллекции --> Коллекции --> Функции для сбора статистики по коллекции) есть ссылка на класс UtilitiesCollection
, в котором определены эти методы.
У вас есть коллекция collection_dailyInfection
ежедневных данных о заражении; давайте предположим, что вы указали это в AnyLogic как относящийся к классу коллекции ArrayList
с классом элементов как int
, и вы использовали циклическое событие для добавления счетчика каждый смоделированный день.
Таким образом, ваше выражение суммы должно быть
sum( collection_dailyInfection, c -> c.doubleValue())
c
— это просто произвольный идентификатор текущего элемента, в котором находится сумма (по сути, этот метод суммы проходит через вашу коллекцию), а ->
— это специальный оператор функционального программирования Java 8. Когда вы указываете тип int
в AnyLogic для содержимого вашей коллекции, они фактически сохраняются как объекты Integer
, которые являются объектными версиями примитивов int
. (См. любой учебник по Java, чтобы понять это.)
Таким образом, каждая запись (объект Integer
) имеет метод doubleValue
, который возвращает значение целого числа как двойное. (Функция AnyLogic sum
требует, чтобы бит «значение» был double
, т. е. действительным числом (с плавающей запятой).)
(Ответ anupam691997 - это решение «чистой Java», игнорирующее контекст AnyLogic.)
person
Stuart Rossiter
schedule
14.11.2017
double sum( collection, key )
(имеется в виду, что ключи должны быть суммированы)? Если это так, то это имеет смысл. - person Stefan   schedule 13.11.2017