public static void main(String[] args) {
//一定要牢记四个基本入参
//Function<T,R>
//表示入参一个方法 有输入 有返回 T 是输入类型 R 是输出类型
Function<Integer, String> function = String::valueOf;
System.out.println(function.apply(11));
//Predicate<? super T> 断言 有参数 有返回 返回类型为布尔类型
String s1 ="name";
Predicate<String> predicate =s1::equals;
System.out.println(predicate.test("name"));
//Supplier<? super T> 存储方法 无参有返回会 提供者
Supplier<String> supplier =String::new;
System.out.println(supplier.get());
//Consumer<? super T> 有参 无返回
class User {
String name;
public void set(String name) {
this.name = name;
}
}
User user = new User();
Consumer<String> consumer = user::set;
consumer.accept("你好");
// System.out.println(JSON.toJSONString(user));
}
public static void main(String[] args) {
//创建方式
User user = new User();
user.setName("张三");
Optional<Object> empty = Optional.empty();
//null 会抛出空指针异常
Optional.of(user);
//不会抛出空指针
Optional.ofNullable(user);
//api
Optional<User> userOptional = Optional.ofNullable(user);
Optional<User> userOptional1 = userOptional.filter(user1 -> user1.getName().equals("张三"));
//命中 返回对象否则返回 Empty
System.out.println(userOptional1);
//非空则输出
userOptional.ifPresent(System.out::println);
//参数返回要求是optional
userOptional.flatMap((u)->Optional.empty());
//参数要求直接返回
userOptional.map(User::getName);
//入参是对象 返回的是对象 -------------
User user1 = userOptional.orElse(new User());
//入参是方法
userOptional.orElseGet(User::new);
int i =1;
Integer integer = Optional.of(1).filter((v) -> i == v).orElse(2);
System.out.println(integer);
api的测试
public static void main(String[] args) {
//关于null 的处理
User user=null;
//链式执行会报错
Optional.of(user);
//链式执行在非null 的情况下 会往下 不然就 orElse GET
User result = Optional.ofNullable(user).filter(u -> u.getName().equals("张三")).orElseGet(User::new);
System.out.println(result);
//String value = param.getCity().getCode().getValue();
/*if (param != null) {
if (param.getCity() != null) {
if (param.getCity().getCode() != null) {
String value = param.getCity().getCode().getValue();
}
}
}*/
//连续判空
//Optional.ofNullable(param).map(Param::getCity).map(City::getCode).map(Code::getValue).orElse("init")
}
场景下