我有一个用例,如下所示。
我有如下的东西。
Optional.ofNullable(pojo)
.ifPresent(uniquePojoSet::add) //Added pojo to a set
.//Add city from pojo to a set
.//Add userName from pojo to a list
给你 ifPresent
返回 void
. 我不知道如何处理这个问题?我需要在元素不是空的情况下才能添加。
请建议也要写成标准的方式。
目前的实现。
if(pojo != null && !pojo.isEmpty()) {
//Add Pojo to set
if(pojo.getProperty1() != null) {
//Add to another set
}
if(pojo.getProperty2() != null) {
//Add to another list
}
}
我参考了 这个 但不能完全符合我的要求
自 Optional
是一个值类,而且是不可变的,你可以存储即时步骤和做。
Optional<Pojo> notEmpty = Optional.ofNullable(pojo).filter(pojo -> !pojo.isEmpty());
notEmpty.ifPresent(uniquePojoSet::add);
notEmpty.map(Pojo::getCity).ifPresent(citySet::add);
notEmpty.map(Pojo::getUserName).ifPresent(userNameSet::add);
我认为更可读的方式是简单的... if
级联。
你提到的文章建议将POJO字段转换为 Optional
s. 另一个选择是让getter返回 Optional
的,例如。
public class Pojo {
private String city;
private String username;
public Optional<String> getCity() {
return Optional.ofNullable(city);
}
public Optional<String> getUsername() {
return Optional.ofNullable(username);
}
}
然后,你可以使用他们如下:
Optional.ofNullable(pojo).ifPresent(p -> {
uniquePojoSet.add(p);
p.getCity().ifPresent(cities::add);
p.getUsername().ifPresent(usernames::add);
});