Java8 - 基于一个POJO更新多个列表
Java8 - update more than one list based on a POJO
我有一个用例如下。
- POJO
- 如果 POJO 不为 null 且不为空,则将 pojo 添加到集合中。
- 将 pojo 中的一个元素添加到另一组中
- 从 pojo 添加另一个元素到列表
我有如下内容。
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
returnsvoid
。我不确定如何处理?只有当元素不为 null 且不为空时,我才需要添加。
也请建议写成标准。
当前实施:
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
}
}
我推荐了this但是不能完全符合我的要求
由于 Optional
是一个值 - class 并且不可变,您可以存储直接步骤并执行:
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。另一种选择是使吸气剂 return Optional
s,例如:
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);
});
我有一个用例如下。
- POJO
- 如果 POJO 不为 null 且不为空,则将 pojo 添加到集合中。
- 将 pojo 中的一个元素添加到另一组中
- 从 pojo 添加另一个元素到列表
我有如下内容。
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
returnsvoid
。我不确定如何处理?只有当元素不为 null 且不为空时,我才需要添加。
也请建议写成标准。
当前实施:
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
}
}
我推荐了this但是不能完全符合我的要求
由于 Optional
是一个值 - class 并且不可变,您可以存储直接步骤并执行:
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。另一种选择是使吸气剂 return Optional
s,例如:
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);
});