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