package org.netty1;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
User user = new User("金莲啊,小潘",25);
Optional<User> userOptional = Optional.ofNullable(user);
User user1 = userOptional.get();
// Optional.of(传入null就抛异常)
// Optional.ofNullable(传啥都不会报异常)
//这个Optional里这个对象不是null就会执行ifPresent( 里的内容 ) 不会有任何异常
//很好用 不用写 !=null
Optional.ofNullable(user).ifPresent(t->{
System.out.println("user不是null,我才会执行" );
});
Optional.ofNullable(user)
.filter(t->user.username.contains("金莲"))
.ifPresent(t2->{
System.out.println("filter里是true的话我才能执行到");
});
//获取对象
User[] users = getUser(user);
for (User u : users) {
System.out.println(u);
}
//对象的复杂操作
ObjectTest();
//关于异常
try{
Optional.ofNullable(null).orElseThrow(()->new RuntimeException("我是异常,需要捕获"));
}catch (Exception e) {
e.printStackTrace();
}
}
public static User[] getUser(User user){
//为空的时候获取默认值
//1.9
User user1 = Optional.ofNullable(user)
.or( () -> Optional.ofNullable(new User("admin",18))).get();
//1.8
User user2 = Optional.ofNullable(user).orElse(new User("admin1", 19));
//1.8
User user3 = Optional.ofNullable(user).orElseGet(()->{
return new User("admin2", 20);
});
return new User[]{user1,user2,user3};
}
public static void ObjectTest(){
//user包含address,address包含house
User user = new User();
Address address = new Address();
House house = new House();
house.setName(null);
address.setHouse(house);
user.setAddress(address);
//user.getAddress().getHouse().getName();
Optional<User> userOptional = Optional.ofNullable(user);
String name = userOptional
.map(u->{
return u.getAddress();
})
.map(address1 -> address1.getHouse())
.map(house1 -> house1.getName())
.orElse("default");
System.out.println(name);
String name1 = userOptional
.flatMap(u->Optional.ofNullable(u.getAddress()))
.flatMap(address1 -> Optional.ofNullable(address1.getHouse()))
.flatMap(house1 -> Optional.ofNullable(house1.getName())).orElse("default");
System.out.println(name1);
}
}
Optional在实战开发中的常用姿势
最新推荐文章于 2024-08-26 19:43:03 发布