检查可选和返回字符串Java Stream API中是否存在null属性
我有以下几点检查可选和返回字符串Java Stream API中是否存在null属性,java,java-8,functional-programming,java-stream,optional,Java,Java 8,Functional Programming,Java Stream,Optional,我有以下几点 class Person private String firstName; private String familyName; // Setters and Getters 我有下面的方法 public String getFullName(Optional<Person> persons) { return persons .map(person -> (person.getFirstName() + " " +
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");
}
公共字符串getFullName(可选人员){
返回人员
.map(person->(person.getFirstName()+“”+person.getFamilyName()).orElse(“无效”);
}
我只想检查名字或姓氏是否为
null
,为此人显示“无效”
。我想添加一种验证方法,但我确信有一种更简单的方法我想不出来。您可以使用过滤器:
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");
}
公共字符串getFullName(可选人员){
返回人员
.filter(person->Objects.nonNull(person.getFirstName())和&Objects.nonNull(person.getFamilyName())
.map(person->(person.getFirstName()+“”+person.getFamilyName()).orElse(“无效”);
}
您可以使用过滤器:
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");
}
公共字符串getFullName(可选人员){
返回人员
.filter(person->Objects.nonNull(person.getFirstName())和&Objects.nonNull(person.getFamilyName())
.map(person->(person.getFirstName()+“”+person.getFamilyName()).orElse(“无效”);
}
您要查看的内容,在地图之前:
return persons
.filter(person -> person.getFamilyName() != null && person.getFirstName() != null)
.map(person -> person.getFirstName() + " " + person.getFamilyName())
.orElse("Invalid");
这意味着,如果族和名字不为null,则创建您的concatation,否则返回无效消息,或者您甚至可以在映射之前使用您要查看的或lsetrow
引发异常:
return persons
.filter(person -> person.getFamilyName() != null && person.getFirstName() != null)
.map(person -> person.getFirstName() + " " + person.getFamilyName())
.orElse("Invalid");
这意味着,如果族和名字不为null,则创建您的concatation,否则返回无效消息,或者您甚至可以使用另一种功能方法抛出异常 首先为所需的字段验证创建谓词生成器方法:
public static <T, F> Predicate<T> hasRequiredValue(Function<T, F> fieldGetter) {
return fieldGetter.andThen(Objects::nonNull)::apply;
}
然后按如下方式使用:
Person person = ...
String fullName = getFullName(person).orElse("Invalid");
另一种功能性方法 首先为所需的字段验证创建谓词生成器方法:
public static <T, F> Predicate<T> hasRequiredValue(Function<T, F> fieldGetter) {
return fieldGetter.andThen(Objects::nonNull)::apply;
}
然后按如下方式使用:
Person person = ...
String fullName = getFullName(person).orElse("Invalid");
将
Optional
作为参数传递不是一个好主意。相反,对于该方法使用可选会更好。类似这样的内容:Optional getFullName(Person-Person){if(Person.getFamilyName()==null&&Person.getFirstName()==null)返回Optional.empty();返回Optional.of(Person.getFirstName()+“”+Person.getFamilyName());}
@HadiJ很好。在回答问题后,我也想到了这一点。开发人员无法习惯Optional
的最初目的,因为这是返回可为空值的安全方法。将Optional
作为方法参数有点违反这一原则。将Optional
作为参数传递不是一个好主意。相反,对于该方法使用可选会更好。类似这样的内容:Optional getFullName(Person-Person){if(Person.getFamilyName()==null&&Person.getFirstName()==null)返回Optional.empty();返回Optional.of(Person.getFirstName()+“”+Person.getFamilyName());}
@HadiJ很好。在回答问题后,我也想到了这一点。开发人员无法习惯Optional
的最初目的,因为这是返回可为空值的安全方法。将作为可选的
作为方法参数有点违反这一原则。