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}