【来自B站视频:Java8新特性教程,尚硅谷李贺飞老师:https://www.bilibili.com/video/BV14W411u7Ly?p=1】
本Java视频涵盖了 Java8 的所有新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。Java8 的新特性使 Java 的运行速度更快、代码更少(Lambda 表达式)、便于并行、最大化减少空指针异常。【JDK8官网:https://docs.oracle.com/javase/8/、JDK8的API官网:https://docs.oracle.com/javase/8/docs/api/index.html】
目录
【2-1、中间操作:筛选filter、切片limit、跳过skip、去重distinct】
【3-1、终止操作:查找与匹配 allMatch、anyMatch、noneMatch、findFirst、findAny、count、max、min】
【3-3、终止操作:收集:collect。Collector是一个接口, Collectors是其工具类, 返回其实现类】
【3-4、终止操作:分组: Collectors.groupingby (Employee::getStatus) 】
【3-5、终止操作:分区: Collectors.partitioningBy (e->e.getSalary()>8000) 】
【匿名内部类和lambda表达式演示】
【需求1:获取当前公司员工中年龄大于35的员工信息】
【需求2:获取当前公司员工中薪资大于5000的员工信息】
【发现问题:需求1和需求2中重复代码太多,需要做优化,怎么优化呢?见下面的方式。】【策略设计模式:声名一个接口、拿到该接口的两个实现、写一个策略,即可。】
【优化方式一:策略设计模式的方式】
【优化方式二:匿名内部类的方式】
【优化方式三:lambda表达式的方式】
【优化方式四:StreamAPI的方式】
【题目1】使用lambda表达式作为参数对Employee对象数组排序
【题目2】使用lambda表达式作为参数对String字符串做各种处理
【题目3】使用lambda表达式作为参数对两个入参做处理
【Java内置四大核心函数式接口】
【Java内置的其他函数式接口】
1、Consumer<T>:消费型接口
解释:有一个参数,但是没有返回值。内置接口:void accept(T t) ;
2、Supplier<T>:供给型接口
解释:没有参数,但是会有一个返回值。内置接口:T get() ;
3、Function<T,R>:函数型接口
解释:有一个参数,同时会有一个返回值。内置接口:R apply(T t) ;
4、Predicate<T>:断言型接口
解释:有一个参数,同时会有一个返回值,且该返回值是boolean类型。内置接口:boolean test(T t) ;
【map操作:做一个提取操作。reduce操作:做一个规约操作。】
【1、创建Stream流:共有四种方式】
【2-1、中间操作:筛选filter、切片limit、跳过skip、去重distinct】
【中间操作:不会执行任何lambda表达式中的操作。终止操作:一次性执行全部操作,这个过程称为 惰性求值。】
【注意:多个中间操作可以连接起来形成一个流水线,除非在流水线上触发终止操作,否则 中间操作不会执行任何的处理, 而在终止操作时一次性执行全部处理,这个过程称为“惰性求值”。】
【短路:只要找到了Stream流中间操作条件 所需要的数据之后,后面的内部迭代就不再继续进行了,这个过程称为“短路”!】
【2-2、中间操作:映射 map、flatmap】
【2-3、中间操作:排序 sorted】
【3-1、终止操作:查找与匹配 allMatch、anyMatch、noneMatch、findFirst、findAny、count、max、min】
【3-2、终止操作:规约:map、reduce】
【3-3、终止操作:收集:collect。Collector是一个接口, Collectors是其工具类, 返回其实现类】
【3-4、终止操作:分组: Collectors.groupingby (Employee::getStatus) 】
【3-5、终止操作:分区: Collectors.partitioningBy (e->e.getSalary()>8000) 】
【Stream API 练习】
【Java8之前可以这样用:】
【Java8之后可以这样用:parallel的底层是ForkJoinPool】