publicclassUserRepository{ public User findUserByName(String name){ if (name.equals("James")) { returnnew User("James", "James Harden"); } else { returnnull; } } }
我们模拟一个数据库中存在的用户名
1 2 3 4 5 6 7
publicstaticvoidmain(String[] args){ UserRepository userRepository = new UserRepository(); User user = userRepository.findUserByName("James"); System.out.println(user.getFullName());
} // 打印结果 => James Harden
我们模拟一个数据库中没有的用户名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
publicstaticvoidmain(String[] args){ UserRepository userRepository = new UserRepository(); User user = userRepository.findUserByName("James"); System.out.println(user.getFullName());
} // 打印结果 => 报错NullPointerException,在Java中引用一个空引用的属性或者调用一个空引用的方法的时候,就会直接报NullPointerException //为了避免报错,我们经常会在方法加上判空 publicstaticvoidmain(String[] args){ UserRepository userRepository = new UserRepository(); User user = userRepository.findUserByName("Rose"); if (user != null) { System.out.println(user.getFullName()); } else { // 在查询为null的时候,我们就会自动创建一个默认的用户 User defaultUser = new User("Jim", "Jim Green"); System.out.println(defaultUser.getFullName()); } }
// 正确的取值方式 publicstaticvoidmain(String[] args){ UserRepository userRepository = new UserRepository(); Optional<User> optionalUser = userRepository.findUserByName("Edison1"); User user = optionalUser.orElse(new User("Neo","Green")); System.out.println(user.getFullName()); User user2 = optionalUser.orElseGet(()->new User("Hello","World")); System.out.println(user2.getFullName()); }
orElse:不管传入的是空还是非空,都会执行传入的这个参数(都会去直接new User())
orElseGet:只有在为空的情况下,才会去执行。
1 2 3 4 5 6
publicstaticvoidmain(String[] args){ UserRepository userRepository = new UserRepository(); Optional<User> optionalUser = userRepository.findUserByName("Edison1"); optionalUser.orElseThrow(() -> new RuntimeException("User not found!!!")); } //输出 => Exception in thread "main" java.lang.RuntimeException: User not found!!!
条件判断
1 2 3 4 5 6 7 8 9 10
UserRepository userRepository = new UserRepository(); Optional<User> optionalUser = userRepository.findUserByName("Edison"); optionalUser.ifPresent(user -> System.out.println(user.getFullName())); // 如果user存在对象,则执行语句,反之则什么也不做 optionalUser.ifPresentOrElse( user -> System.out.println(user.getFullName()), () -> System.out.println("User not Found!!!") ); //user存在执行System.out.println(user.getFullName()) //不存在则执行System.out.println("User not Found!!!")