1 package io.atlassian.fugue.extensions.step;
2
3 import io.atlassian.fugue.extensions.functions.Function6;
4 import io.atlassian.fugue.extensions.functions.Predicate6;
5
6 import java.util.Optional;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public final class OptionalStep6<A, B, C, D, E, F> {
25 private final Optional<A> optional1;
26 private final Optional<B> optional2;
27 private final Optional<C> optional3;
28 private final Optional<D> optional4;
29 private final Optional<E> optional5;
30 private final Optional<F> optional6;
31
32 OptionalStep6(Optional<A> optional1, Optional<B> optional2, Optional<C> optional3, Optional<D> optional4, Optional<E> optional5,
33 Optional<F> optional6) {
34 this.optional1 = optional1;
35 this.optional2 = optional2;
36 this.optional3 = optional3;
37 this.optional4 = optional4;
38 this.optional5 = optional5;
39 this.optional6 = optional6;
40 }
41
42
43
44
45
46
47
48
49 public OptionalStep6<A, B, C, D, E, F> filter(Predicate6<? super A, ? super B, ? super C, ? super D, ? super E, ? super F> predicate) {
50 Optional<F> filterOptional6 = optional1.flatMap(value1 -> optional2.flatMap(value2 -> optional3.flatMap(value3 -> optional4
51 .flatMap(value4 -> optional5.flatMap(value5 -> optional6.filter(value6 -> predicate.test(value1, value2, value3, value4, value5, value6)))))));
52 return new OptionalStep6<>(optional1, optional2, optional3, optional4, optional5, filterOptional6);
53 }
54
55
56
57
58
59
60
61
62
63 public <Z> Optional<Z> yield(Function6<? super A, ? super B, ? super C, ? super D, ? super E, ? super F, Z> functor) {
64 return optional1.flatMap(value1 -> optional2.flatMap(value2 -> optional3.flatMap(value3 -> optional4.flatMap(value4 -> optional5
65 .flatMap(value5 -> optional6.map(value6 -> functor.apply(value1, value2, value3, value4, value5, value6)))))));
66 }
67 }