Pio*_*ski 4 java optional java-8
我有一段代码返回一个字段的值,但也初始化它:
public Observable<Integer> asObservable() {
if (subject == null) {
subject = BehaviorSubject.createDefault(0);
}
return subject;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Optional类来避免if声明:
public Observable<Integer> asObservableWithOptional() {
Optional.ofNullable(subject)
.executeIfAbsent(() -> BehaviorSubject.createDefault(0));
return subject;
}
Run Code Online (Sandbox Code Playgroud)
Hovewer我对这段代码仍然不满意.有没有办法只用一个语句把这个方法变成一个?类似于以下的东西将无法工作,因为subject在调用ofNullable工厂方法期间尚未初始化:
return Optional.ofNullable(subject)
.executeIfAbsent(() -> BehaviorSubject.createDefault(0))
.get();
Run Code Online (Sandbox Code Playgroud)
注意:我没有使用原始Java8 API,而是使用此API的aNNiMON端口https://github.com/aNNiMON/Lightweight-Stream-API.
怎么样
return subject = Optional.ofNullable(subject).orElseGet(() -> BehaviorSubject.createDefault(0));
Run Code Online (Sandbox Code Playgroud)
当然,你可以使用三元条件运算符而不是创建一个Optionaljust来立即丢弃它:
return subject != null ? subject : (subject = BehaviorSubject.createDefault(0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |