JAVA8新特性

1.Lambda表达式
Lambda 是一个 匿名函数, 我们可以把 Lambda表达式理解为是一段可以传递的代码。可以写出更简洁、更灵活的代码。
语法格式一: 无参, 无返回值, Lambda体只需要一条语句
 Runnable runnable2 = () -> System.out.println("hello word lambda");
语法格式二: Lambda 需要一个参数
(args) -> System.out.println(args);
语法格式三 : Lambda只需要一个参数时,Lambda操作符左侧参数的小括号可以省略
() -> System.out.println(args);
语法格式四: Lambda 需要两个参数, 并且有返回值
(x,y) -> {System.out.println("语法格式四");
return x+y;}
语法格式五: 当Lambda体只有一条语句时, return 与 大括号可以省略 参数类型也可以省(类型推断)
(x,y) -> x+y;
 
2.函数式接口:
四大核心函数式接口(只有一个抽象方法的接口)
当Lambda表达式有参数但无返回值时,用Consumer< T> consumer=Lambda表达式   然后用consumer.accept()
 Consumer<String> consumer = (x) -> out.println(x);
    consumer.accept("hello lamdba");
结果:hello lamdba
当Lambda表达式无参数但有返回值时,用Supplier< T>  supplier=Lambda表达式   然后用supplier.get();
Employee employee = new Employee(11, "林青霞", 28, 5555);
    Supplier<String> supplier = () -> employee.getName();
    System.out.println(supplier.get());
结果:林青霞
有参数类型为T有返回值类型为R  用Function< T,R>   R apply(T t)
BiFunction<Integer, Integer, Integer> biFunction = (x, y) -> Math.max(x, y);//前两个integer为参数类型,后一个为返回值类型
   System.out.println(biFunction.apply(24, 9));
结果:24
确定类型为T的对象是否满足某约束,并返回boolean值   Predicate< T>    boolean test (T t)
BiPredicate<String, String> biPredicate = (x, y) -> x.equals(y);
    System.out.println(biPredicate.test("dd", "DD"));
结果:false
 
3.方法引用和构造器引用:
方法引用语法格式:使用操作符 ” :: ” 将方法名和对象或者类的名字分隔开来
对象 :: 实例方法名
类名 :: 静态方法名
类名 :: 实例方法名
构造器引用:语法格式:ClassName :: new
 
4.stream API:
Stream操作的三个步骤
1 第一步创建stream
2 第二步中间操作
3 第三步终止操作终端操作
创建Stream的四种方式
1.集合创建流:Stream<Employee> stream = list.stream();
2.由数组创建流:Stream<Integer> stream1 = Arrays.stream(num);
3.由值创建流:Stream<Integer> stream2 = Stream.of(1, 5, 7);
4.由函数创建流
中间操作 惰性求值 除非流水线(中间操作组成的)上触发终止操作,否则中间操作不会执行任何的处理! 而在终止操作时一次性全部处理,称为“惰性求值”。
fliter 筛选  limit 截断  skip 跳过 distinct() 去重
终止操作:foreach allmatch count max min等
格式:emps.stream() .allMatch(Lambda表达式)
 
5.新时间日期API:
localdate localtime localdatetime
LocalDate localDate =LocalDate.now();
LocalDate localDate = LocalDate.of(2016, 10, 26);
 LocalDateTime localDateTime2 = localDateTime1.plusDays(5);
 Duration duration = Duration.between(localTime1, localTime);时间间隔
 Period period = Period.between(localDate1, localDate); 时期间隔
TemporalAdjuster : 时间校正器。有时我们可能需要获 取例如:将日期调整到“下个周日”等操作。
 LocalDateTime dateTime = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));// 下个周日