Optional结合lambda表达式更优雅地处理null值(日常开发中常用的)
假设我们有一个学生对象
public class Student {
private String name;
private Integer age;
// 全参构造函数
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
// toString 方法
@Override
public String toString() {
return"Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
1、判断学生年龄是否符合标准
public void optionalTest() { Student student = new Student(); Optional.ofNullable(student) .map(Student::getAge) .filter(o -> o < 18) .orElseThrow(() -> new RuntimeException("所有学生年龄都超过18岁了")); }
通过optional机制优雅地规避学生对象为null的场景
2、优雅的处理集合为null的场景
public void optionalTest() { List<Student> students = null; Optional.ofNullable(students).orElse(Lists.newArrayList()) .stream() .map(Student::getName) .collect(Collectors.toList()); }
3、优雅的获取学生的名字
public void optionalTest() { Student student = null; Optional.ofNullable(student) .map(Student::getName) .filter(StringUtil::isNotEmpty) .orElse(DEFAULT_STUDENT); }
从以上三种场景可以明显看出,Optional + Lambda 让我们少写了很多 if-else 代码块。传统的 Java 写法显得冗长且难以理解,而 Optional+Lambda 则简洁明了,清晰易懂。
总结
通过结合 Lambda 表达式和 Optional,Java 的 null 处理变得更加优雅和简洁。希望这篇文章能帮助你更好地理解和使用这些特性。