在Java8中引入了一个新的操做符“->”,该操做符称为箭头操做符或Lambda
操做符,左侧:Lambda
表示式的参数列表,右侧:Lambda
表达式中所要执行的功能,即把函数做为一个方法的参数,一般多用于匿名内部类的简洁写法,同时lambda
表达式也是更好的使用StreamAPI
的基础。java
接口中只有一个抽象方法的接口,就叫函数式接口。可使用注解@FunctionalInterface
检查是否为函数式接口。例如,咱们能够定义一个处理一个数的的函数接口,数就是函数接口的参数,每次怎么处理就是这个函数接口的实现,咱们调用这个函数接口的时候就传入要处理的数字和处理逻辑就可。简单示例以下:数据库
@FunctionalInterface
public interface MyFun {
public Integer getValue(Integer num);
}
复制代码
public Integer operation(Integer num,MyFun mf){
return mf.getValue(num);
}
复制代码
@Test
public void test5(){
Integer num = operation(100,(x)-> x*x);
System.out.println(num);
}
复制代码
Consumer
消费型接口: 参数类型 T 返回类型 void
对类型T的对象应用操做,Consumer
消费型是传入一个参数,进行处理Supplier
供给型接口: 参数类型 无 返回类型 T 返回类型为T的对象,Supplier
供给型是获得一些结果Function<T,R>
函数型接口: 参数类型 T 返回类型 R 对了类型为T的对象应用操做,并返回结果,Function
函数型是传入一个参数,处理后返回一个结果Predicate
断言型接口: 参数类型 T 返回类型boolean
肯定类型为T的对象是否知足某约束,并返回布尔值。Predicate
断言型就是作一些判断操做当要传递给Lambda体的操做,已经有了实现的方法,可使用方法引用. (实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致)。 方法引用:使用操做符“::”将方法名和对象或类的名字分割开,例如:数组
方法引用的实质就是使用更简单的方式代替Lambda表达式函数
这个能够说是我用的最多的啦,开发中集合的遍历,分组,过滤,排序,判断,筛选等等,Stream是Java8中处理集合的关键抽象概念,它能够指定你但愿对集合进行测操做,能够执行很是复杂的查找,过滤和映射数据的操做,使用Stream API对集合数据进行操做就相似于使用SQL执行的数据库查询查询,Stream API提供了一种高效且易于使用的处理数据的方式。 流(Stream)是数据渠道,用于操做数据源(集合、数组等)所生成的元素序列,“集合讲的是数据,流讲的是计算”,须要注意的是如下三点:微服务
LocalDateTime是一个不可变的日期时间对象,表明日期时间,一般被视为年 - 月 - 日 - 时 - 分 - 秒。这个也是在开发中使用的最多的,例如统计数据的时候根据时间分组后,统计当前季度或者下一季度的,或者获取当前年月,再例如获取当前月的第一天,当前月的最后的一天,下两个月的最后一天等等,使用LocalDateTime
均可以很简单的完成,举个例子,根据出生日期计算年龄:学习
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDate csrq = LocalDate.parse(csrq, dtf);
LocalDate now = LocalDate.now();
return (int)ChronoUnit.YEARS.between(csrq, now);
复制代码
这个也能够说是一大神器啦,排除空指针异常呀,有时候本身写的你还能注意点盼空,随着微服务的使用,调用其余系统接口,你也不彻底知作别人会给你返回我的什么呀,以前咱们可使用三木运算判空或者if
判空,如今可使用Optional
更加优雅的消除空指针。spa
这个虽然没有以前的新特性用的多,可是在最近的项目开发中使用带了,就顺便记录一下吧,3d
String text = "show me the code";
String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
复制代码