接口
新 interface 的方法可以用default 或 static修饰
一个 interface 中可以有多个方法被它们修饰,这 2 个修饰符的区别主要也是普通方法和静态方法的区别。
- default修饰的方法,是普通实例方法,可以用this调用,可以被子类继承、重写。
- static修饰的方法,使用上和一般类静态方法一样。但它不能被子类继承,只能用Interface调用。
函数式接口
一、Supplier 供给型接口
java.util.function.Supplier接口仅包含一个无参的方法:T get(),用来获取一个泛型参指定类型的对象数据。
二、Consumer 消费型接口
java.util.function.Consumer定义了一个名叫accept的抽象方法,它接受泛型T 的对象,没有返回(void)。你如果需要访问类型T的对象,并对其执行某些操作,就可以使用 这个接口
三、Predicate
java.util.function.Predicate接口定义了一个名叫test的抽象方法,它接受泛型 T对象,并返回一个boolean
4、Function
java.util.function.Function接口定义了一个叫作apply的方法,它接受一个 泛型T的对象,并返回一个泛型R的对象。如果你需要定义一个Lambda,将输入对象的信息映射 到输出,就可以使用这个接口
Option
Optional不是函数式接口,而是用于防止 NullPointerException 的漂亮工具
orElse,orElseGet()和orElseThrow()都是在构造函数传入的value值为null时,进行调用的user值不为null时,orElse函数依然会执行createUser()方法,而orElseGet函数并不会执行createUser()方法,大家可自行测试
例一
以前写法
public String getCity(User user) throws Exception{ if(user!=null){ if(user.getAddress()!=null){ Address address = user.getAddress(); if(address.getCity()!=null){ return address.getCity(); } } } return null; }
JAVA8写法
return Optional.ofNullable(user).map(u-> u.getAddress()).map(a->a.getCity()).orElse(null);
例二
以前写法
if(user!=null){ dosomething(user); }
JAVA8写法
Optional.ofNullable(user) .ifPresent(u->{ dosomething(u); });
日期
格式化
LocalDateTime dateTime = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr = dateTimeFormatter.format(dateTime);或者
dateTime.format(dateTimeFormatter);
System.out.println(dateTimeStr);
字符串转日期格式
LocalDate date = LocalDate.of(2021, 1, 26); LocalDate.parse("2021-01-26"); LocalDateTime dateTime = LocalDateTime.of(2021, 1, 26, 12, 12, 22); LocalDateTime.parse("2021-01-26 12:12:22"); LocalTime time = LocalTime.of(12, 12, 22); LocalTime.parse("12:12:22");
获取指定日期 LocalDate today = LocalDate.now(); //获取当前月第一天: LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 取本月最后一天 LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); //取下一天: LocalDate nextDay = lastDayOfThisMonth.plusDays(1); //当年最后一天 LocalDate lastday = today.with(TemporalAdjusters.lastDayOfYear()); //2021年最后一个周日,如果用Calendar是不得烦死。 LocalDate lastMondayOf2021 = LocalDate.parse("2021-12- 31").with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));