blob: 04b6ca8b0f0fd676d478bffe1b36cd4fd35915de (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package lv.enes.mc.eris_alchemy.utils;
import java.util.OptionalDouble;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
public class OptionalDoubleSummer implements Collector<OptionalDouble, Ref<OptionalDouble>, OptionalDouble> {
@Override
public Supplier<Ref<OptionalDouble>> supplier() {
return () -> new Ref<>(OptionalDouble.of(0));
}
@Override
public BiConsumer<Ref<OptionalDouble>, OptionalDouble> accumulator() {
return (ref, od) -> {
if (ref.getValue().isPresent()) {
if (od.isPresent()) {
ref.setValue(OptionalDouble.of(ref.getValue().getAsDouble() + od.getAsDouble()));
} else {
ref.setValue(OptionalDouble.empty());
}
}
};
}
@Override
public BinaryOperator<Ref<OptionalDouble>> combiner() {
return (ref1, ref2) -> {
accumulator().accept(ref1, ref2.getValue());
return ref1;
};
}
@Override
public Function<Ref<OptionalDouble>, OptionalDouble> finisher() {
return Ref::getValue;
}
@Override
public Set<Characteristics> characteristics() {
return Set.of(Characteristics.UNORDERED);
}
}
|