File tree Expand file tree Collapse file tree 2 files changed +100
-0
lines changed Expand file tree Collapse file tree 2 files changed +100
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .winterbe .java8 ;
2
+
3
+ import java .util .Optional ;
4
+ import java .util .function .Function ;
5
+
6
+ /**
7
+ * Simplified elvis-like operator. You can achieve the same with Optional but Take has simpler syntax.
8
+ *
9
+ * @see Optional2
10
+ * @author Benjamin Winterberg
11
+ */
12
+ public class Take <T > {
13
+
14
+ private static final Take <?> EMPTY = new Take <>(null );
15
+
16
+ private T value ;
17
+
18
+ private Take (T value ) {
19
+ this .value = value ;
20
+ }
21
+
22
+ public static <T > Take <T > of (T something ) {
23
+ return new Take <>(something );
24
+ }
25
+
26
+ public <S > Take <S > take (Function <? super T , S > mapper ) {
27
+ if (!isPresent ()) {
28
+ return empty ();
29
+ }
30
+ S result = mapper .apply (value );
31
+ return new Take <>(result );
32
+ }
33
+
34
+ public Optional <T > get () {
35
+ return Optional .ofNullable (value );
36
+ }
37
+
38
+ public T orElse (T fallback ) {
39
+ if (isPresent ()) {
40
+ return value ;
41
+ }
42
+ return fallback ;
43
+ }
44
+
45
+ public boolean isPresent () {
46
+ return value != null ;
47
+ }
48
+
49
+ @ SuppressWarnings ("unchecked" )
50
+ private static <T > Take <T > empty () {
51
+ return (Take <T >) EMPTY ;
52
+ }
53
+
54
+ }
Original file line number Diff line number Diff line change
1
+ package com .winterbe .java8 ;
2
+
3
+ import java .util .Optional ;
4
+
5
+ /**
6
+ * @author Benjamin Winterberg
7
+ */
8
+ public class TakeTest {
9
+
10
+ static class Outer {
11
+ Nested nested = new Nested ();
12
+
13
+ Nested getNested () {
14
+ return nested ;
15
+ }
16
+ }
17
+
18
+ static class Nested {
19
+ Inner inner = new Inner ();
20
+
21
+ Inner getInner () {
22
+ return inner ;
23
+ }
24
+ }
25
+
26
+ static class Inner {
27
+ String foo = "foo" ;
28
+
29
+ String getFoo () {
30
+ return foo ;
31
+ }
32
+ }
33
+
34
+ public static void main (String [] args ) {
35
+ Outer something = new Outer ();
36
+
37
+ Optional <String > optional = Take .of (something )
38
+ .take (Outer ::getNested )
39
+ .take (Nested ::getInner )
40
+ .take (Inner ::getFoo )
41
+ .get ();
42
+
43
+ System .out .println (optional .get ());
44
+ }
45
+
46
+ }
You can’t perform that action at this time.
0 commit comments