案例一:
如果是非集合,单纯的判断是否为空,不为空取值为空给个默认值或者初始化值
@Test
void Test1(){
//有返回值的判空,如果是非集合,单纯的判断是否为空,不为空取值为空给个默认值或者初始化值
String referer =null;
String s = Optional.ofNullable(referer).orElse(new String());
System.out.println("s = " + s);
}
结果
案例二
java8自带Optional判空和hutool工具中封装Opt判空对比
@Test
void Test2() {
String referer =null;
//判空,Optional的ofNullable取值一般直接获取会报空指针,使用Opt即可避免判断
String s2 = Opt.ofNullable(referer).get();//值为null返回一个null
System.out.println("s2 = " + s2);
String s1 = Optional.ofNullable(referer).get();//值为null会报错 java.util.NoSuchElementException: No value present
}
结果
延伸
Opt.ofBlankAble
和Opt.ofNullable
对比
ofBlankAble
相对于ofNullable
考虑了字符串为空串的情况
@Test
void Test3(){
String referer =null;
//判空,Optional的ofNullable取值一般直接获取会报空指针,使用Opt即可避免判断
String s1 = Opt.ofNullable(referer).get();//值为null返回一个null
//ofBlankAble相对于ofNullable考虑了字符串为空串的情况
String s2 = Opt.ofBlankAble(referer).get();
String s3 = Opt.ofBlankAble("").get();
System.out.println("s1 = " + s1);
System.out.println("s2 = " + s2);
System.out.println("s3 = " + s3);
}
结果
通过结果分析实际判断字符串是否为空是建议使用Opt.ofBlankAble
案例三
使用optional判空后对结果后续处理
一、将所有学生姓名统计出来
@Test
void Test() {
List<Student> list = null;
// list.add(new Student(1, 1, 1, "张三"));
// list.add(new Student(1, 1, 2, "李四"));
// list.add(new Student(1, 2, 3, "王五"));
/**正确用法 students = []*/
List<String> strings = Opt.ofNullable(list)
.map(m -> m.stream().map(Student::getName).collect(Collectors.toList()))
.orElse(new ArrayList<>());
System.out.println("students = " + strings);
//students = []
/**错误用法 如果list为空会报java.util.NoSuchElementException: No value present*/
List<String> collect1 = Optional.ofNullable(list).get()
.stream()
.map(Student::getName)
.collect(Collectors.toList());
System.out.println("collect1 = " + collect1);
/**错误用法 如果list为空会报java.lang.NullPointerException*/
List<String> collect = list.stream().map(Student::getName).collect(Collectors.toList());
System.out.println("collect = " + collect);
}
案例四
实际应用
过滤符合条件的数据,如果没有返回默认值
@Test
public void whenMap_thenOk() {
User user = new User("anna@gmail.com", "1234");
String email = Optional.ofNullable(user)
.filter(u -> u.getEmail() != null && u.getEmail().contains("@"))
.map(u -> u.getEmail())
.orElse(null);
System.out.println("email = " + email);
}
结果
没有满足条件的结果时