name:
src/main/java/io/protobase/f7/formulas/math/SUM.java
-rw-r--r--
1085
1package io.protobase.f7.formulas.math;
2
3import io.protobase.f7.formulas.AbstractFormula;
4import io.protobase.f7.formulas.FormulaName;
5import io.protobase.f7.models.GridColumnRowKey;
6import io.protobase.f7.utils.Converters;
7import io.protobase.f7.utils.Mappers;
8
9import java.util.Arrays;
10import java.util.Objects;
11import java.util.function.BiFunction;
12import java.util.function.Function;
13
14/**
15 * Sum values together.
16 */
17public class SUM extends AbstractFormula {
18 public static FormulaName NAME = FormulaName.SUM;
19 public static SUM SELF = new SUM();
20
21 public SUM() {
22 super();
23 }
24
25 public SUM(Function<Object, Object> lookup, BiFunction<GridColumnRowKey, Object, Object> collateralLookup) {
26 super(lookup, collateralLookup);
27 }
28
29 public Object internal(GridColumnRowKey origin, Object... values) {
30 checkAtLeastLength(values.length, 1, NAME);
31 return Arrays.stream(values)
32 .map(this.lookup)
33 .flatMap(Mappers::toFlatStream)
34 .filter(Objects::nonNull)
35 .map(Converters::toDouble)
36 .reduce(Double::sum)
37 .orElse(0.0);
38 }
39}