f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
name: src/main/java/io/protobase/f7/formulas/math/PRODUCT.java
-rw-r--r--
1215
 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
14public class PRODUCT extends AbstractFormula {
15  public static FormulaName NAME = FormulaName.PRODUCT;
16  public static PRODUCT SELF = new PRODUCT();
17
18  public PRODUCT() {
19    super();
20  }
21
22  public PRODUCT(Function<Object, Object> lookup, BiFunction<GridColumnRowKey, Object, Object> collateralLookup) {
23    super(lookup, collateralLookup);
24  }
25
26  @Override
27  public Object internal(GridColumnRowKey origin, Object... values) {
28    checkAtLeastLength(values.length, 1, NAME);
29    return Arrays.stream(values)
30        .map(lookup)
31        .flatMap(Mappers::toFlatStream)
32        .filter(Objects::nonNull)
33        .map(Converters::toDouble)
34        .reduce((first, second) -> {
35          if (Objects.nonNull(second)) {
36            return first * second;
37          }
38          return first;
39        })
40        .orElse(0.0);
41  }
42}