java8新特性

动态代理:
使用代理将对象包装,用代理对象取代原始对象,任何对原始对象的调用都通过代理对象,代理对象决定是否何时调用转到原始对象上;
静态代理缺点
①初始化的时候写死了;
②每个代理类只能为一套接口服务
动态代理特点:
通过代理类调用其对象方法,运行时根据需要动态创建目标类的代理对象;
解决主要两个问题;
①如果根据加载到内存中的被代理类,动态创建一个代理类及对象;
通过proxy.newproxyinstance()
②当通过代理类的对象调用a时如果动态的调用被代理类中的同名方法a
通过invocationhandler接口实现类及其方法invoke()
java8新特性
①速度更宽
②lambda表达式
③stream api
④便于并行
⑤最大化减少空指针异常optional
⑥Nashorn引擎 允许在jvm上运行js应用
lambda表达式:
匿名函数,一段可以传递的代码
 (i1,i2)->Intger.compare(12,13)
左边:lambda形参列表
右边:lambda体
总结:
①lambda形参列表的参数类型可以省略(类型推断);
如果lambda形参列表只有一个参数,其一对()也可以省略;
②lambda体应该用大括号包裹,如果lambda体只有一条可以省略,可能是return语句;
lambda本质是作为接口的实例,因此new 接口;
函数式接口:
如果一个接口中只声明了一个抽象方法,则被称为函数式接口;
可以通过lambda表达式创建函数式接口的实例;
可以在接口上使用@functionallnterface注解定义函数式接口;同时javadoc也会包含一条声明说明他是函数式接口;
java.until.function是函数式接口的包;
以前匿名实现类都可用lambda写;
java内置四大核心函数式接口;
消费性接口Consumer<T>
供给型接口Supplier<T>
函数型接口Function<T>
断定型接口Predicate<T>
方法引用和构造器引用
当要传递给lambda体的操作体已经有实现的方法就可以用方法引用;
方法引用本质上就是lambda表达式是函数式接口实例
使用格式:
类(对象)::方法名
具体分如下三种情况;
①对象::非静态方法
②类::静态方法
③类::非静态方法 当形参其中之一作为方法调用者时使用
方法引用的使用要求:接口中的抽象方法的形参列表和返回值必须和方法引用的方法的形参列表和返回值相同适用于①和②;
构造器引用:跟方法引用类似,函数式接口的抽象方法的形参列表和构造器形参一致;
抽象方法的返回值类型即为构造器所属的类的类型
数组引用:
把数组看为特殊的类,与构造器引用一致;
Stream api
stream和collection  collection是一种静态内存结构 stream用于计算
stream自己不存数据;
stream不会改变源对象;它们会返回一个持有结果为新stream;
stream操作是延迟执行的这意味着他们需要等到结果的时候才会执行;
stream执行流程
①stream实例化
②一系列中间操作:操作链
③终止操作
说明:
集合使用stream是通过对应的集合实例化对象调用stream方法 通过泛型区分对象
数组使用stream是通过数组调用stream方法然后将对象放到stream方法中
空状态使用stream是通过stream.of(包装类)
无限流是Stream.iterate().limt().foreach()迭代  
生成Stream.generate().limt().foreach().
中间操作:
筛选与切片:
filter 过滤:接收lambda
Stream<对象> stream=list.stream();
stream.filter(e->e.getsalary()>7000).foreach(SYS::println).;
Limit 截断:使其元素不超过给定数量;
stream.limit(n).foreach();
skip 跳过元素 抛弃前n个元素 若数据元素不足 则返回
 stream.skip(n).foreach();
distinct()去重 通过hascode和equals去重
 stream.distinct().foreach();
映射:
map(function f)将元素转换 类似add()
 stream.map(str->str.tosuppercase())foreach();
flatMAp(function f) 类似addall()
排序:
sorted()自然排序;
sorted(Cpmparator com )定制排序
匹配与查找:
归约:reduce()可以将流中的元素反复结合起来 得到一个值返回
收集:collect(Collector c)将流转换为其他形式
emp.stream().filter().collect(Collectors.tolist());
emp.stream().filter().collect(Collectors.toset());
Optional类
容器类 可以装任意类型对象 可以保存null值
Optional.of(T t) 创建实例且t不能为空null
Optional.ofnullable(T t) t可以为null
使用:
先将对象包装成optional类 然后调用对应方法

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值