name:
src/main/java/io/protobase/f7/formulas/logic/XOR.java
-rw-r--r--
1072
1package io.protobase.f7.formulas.logic;
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 XOR extends AbstractFormula {
15 public static FormulaName NAME = FormulaName.XOR;
16 public static XOR SELF = new XOR();
17
18 public XOR() {
19 super();
20 }
21
22 public XOR(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::toBoolean)
34 .reduce(Boolean::logicalXor)
35 .orElse(false);
36 }
37}