Skip to content

Commit 27ebf68

Browse files
committed
Optional类
1 parent f7aca5d commit 27ebf68

File tree

4 files changed

+126
-13
lines changed

4 files changed

+126
-13
lines changed

src/main/java/com/xu/java8/interface_new/Formula.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/java/com/xu/java8/lambda/Person.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,20 @@ public Person(String firstName, String lastName) {
1818
public String toString(){
1919
return firstName+lastName;
2020
}
21+
22+
public String getFirstName() {
23+
return firstName;
24+
}
25+
26+
public void setFirstName(String firstName) {
27+
this.firstName = firstName;
28+
}
29+
30+
public String getLastName() {
31+
return lastName;
32+
}
33+
34+
public void setLastName(String lastName) {
35+
this.lastName = lastName;
36+
}
2137
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.xu.java8.stream;
2+
3+
import com.xu.java8.lambda.Person;
4+
5+
import java.util.Optional;
6+
7+
/**
8+
* Class java8-Optional类:解决空引用的问题
9+
*
10+
* @author hua xu
11+
* @version 1.0.0
12+
* @date 16/08/31
13+
*/
14+
public class Optional1 {
15+
public static void main(String[] args) {
16+
17+
/**创建一个空Optional对象*/
18+
Optional<String> optional = Optional.empty();
19+
20+
/**创建Optional对象有一个非空值*/
21+
Person person = new Person("xu","hua");
22+
Optional<Person> optional2 = Optional.of(person);//如果person是null,将会立即抛出,而不是访问person的属性时获得一个潜在的错误
23+
System.out.println(optional2);
24+
25+
/**判断对象是否存在*/
26+
System.out.println(optional.isPresent());
27+
System.out.println(optional2.isPresent());
28+
29+
/**获取Optional里面的值*/
30+
System.out.println(optional2.get());
31+
32+
/**如果Optional为空返回默认值*/
33+
System.out.println(optional.orElse("fallback"));
34+
optional.ifPresent(System.out::println);
35+
optional2.ifPresent(System.out::println);
36+
}
37+
}
38+
39+
40+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.xu.java8.stream;
2+
3+
import java.util.Optional;
4+
import java.util.function.Supplier;
5+
6+
/**
7+
* Created by xu on 2016/8/31.
8+
*/
9+
public class Optional2 {
10+
static class Outer {
11+
Nested nested = new Nested();
12+
13+
public Nested getNested() {
14+
return nested;
15+
}
16+
}
17+
18+
static class Nested {
19+
Inner inner = new Inner();
20+
21+
public Inner getInner() {
22+
return inner;
23+
}
24+
}
25+
26+
static class Inner {
27+
String foo = "boo";
28+
29+
public String getFoo() {
30+
return foo;
31+
}
32+
}
33+
34+
public static void main(String[] args) {
35+
test1();
36+
test2();
37+
test3();
38+
}
39+
40+
public static <T> Optional<T> resolve(Supplier<T> resolver) {
41+
try {
42+
T result = resolver.get();
43+
return Optional.ofNullable(result);
44+
} catch (NullPointerException e) {
45+
return Optional.empty();
46+
}
47+
}
48+
49+
private static void test3() {
50+
Outer outer = new Outer();
51+
resolve(() -> outer.getNested().getInner().getFoo())
52+
.ifPresent(System.out::println);
53+
}
54+
55+
private static void test2() {
56+
Optional.of(new Outer())
57+
.map(Outer::getNested)
58+
.map(Nested::getInner)
59+
.map(Inner::getFoo)
60+
.ifPresent(System.out::println);
61+
}
62+
63+
private static void test1() {
64+
Optional<Outer> optional=Optional.of(new Outer());
65+
optional.flatMap(o -> Optional.ofNullable(o.nested))
66+
.flatMap(n -> Optional.ofNullable(n.inner))
67+
.flatMap(i -> Optional.ofNullable(i.foo))
68+
.ifPresent(System.out::println);
69+
}
70+
}

0 commit comments

Comments
 (0)