检查 Optional 和 return String Java Stream API 中是否存在 null 属性
Check if null attribute present in Optional and return String Java Stream API
我有以下
class Person
private String firstName;
private String familyName;
// Setters and Getters
而我有以下方法
public String getFullName(Optional<Person> persons) {
return persons
.map(person -> (person.getFirstName() + " " + person.getFamilyName())).orElse("Invalid");
}
我只想检查名字或姓氏是否为 null
,为该人显示 "Invalid"
。我正在考虑添加一种验证方法,但我确信有一种我想不到的更简单的方法。
您可以为此使用过滤器:
public String getFullName(Optional<Person> persons) {
return persons
.filter(person -> Objects.nonNull(person.getFirstName()) && Objects.nonNull(person.getFamilyName()))
.map(person -> (person.getFirstName() + " " + person.getFamilyName())).orElse("Invalid");
}
您正在寻找Optional::filter
,地图前:
return persons
.filter(person -> person.getFamilyName() != null && person.getFirstName() != null)
.map(person -> person.getFirstName() + " " + person.getFamilyName())
.orElse("Invalid");
这意味着,如果姓氏和名字不为空,则创建您的连接,否则 return 一条无效消息,或者您甚至可以使用 orElseThrow
[=14= 抛出异常]
另一种函数式方法。
首先为必填字段验证创建谓词生成器方法:
public static <T, F> Predicate<T> hasRequiredValue(Function<T, F> fieldGetter) {
return fieldGetter.andThen(Objects::nonNull)::apply;
}
并稍微修改getFullName
:
public Optional<String> getFullName(Person person) {
return Optional.ofNullable(person)
.filter(hasRequiredValue(Person::getFamilyName))
.filter(hasRequiredValue(Person::getFirstName))
.map(p -> p.getFirstName() + " " + p.getFamilyName());
}
然后使用如下:
Person person = ...
String fullName = getFullName(person).orElse("Invalid");
我有以下
class Person
private String firstName;
private String familyName;
// Setters and Getters
而我有以下方法
public String getFullName(Optional<Person> persons) {
return persons
.map(person -> (person.getFirstName() + " " + person.getFamilyName())).orElse("Invalid");
}
我只想检查名字或姓氏是否为 null
,为该人显示 "Invalid"
。我正在考虑添加一种验证方法,但我确信有一种我想不到的更简单的方法。
您可以为此使用过滤器:
public String getFullName(Optional<Person> persons) {
return persons
.filter(person -> Objects.nonNull(person.getFirstName()) && Objects.nonNull(person.getFamilyName()))
.map(person -> (person.getFirstName() + " " + person.getFamilyName())).orElse("Invalid");
}
您正在寻找Optional::filter
,地图前:
return persons
.filter(person -> person.getFamilyName() != null && person.getFirstName() != null)
.map(person -> person.getFirstName() + " " + person.getFamilyName())
.orElse("Invalid");
这意味着,如果姓氏和名字不为空,则创建您的连接,否则 return 一条无效消息,或者您甚至可以使用 orElseThrow
[=14= 抛出异常]
另一种函数式方法。
首先为必填字段验证创建谓词生成器方法:
public static <T, F> Predicate<T> hasRequiredValue(Function<T, F> fieldGetter) {
return fieldGetter.andThen(Objects::nonNull)::apply;
}
并稍微修改getFullName
:
public Optional<String> getFullName(Person person) {
return Optional.ofNullable(person)
.filter(hasRequiredValue(Person::getFamilyName))
.filter(hasRequiredValue(Person::getFirstName))
.map(p -> p.getFirstName() + " " + p.getFamilyName());
}
然后使用如下:
Person person = ...
String fullName = getFullName(person).orElse("Invalid");