基础图解之java8的基础知识

一、基础知识 

1 . 通过行为参数化传递代码 
a) Java8之前主要体现在策略模式(java.io.FilenameFilter)上,以前的时候我们通常需要传递一个匿名对象或者实例化具体类才能达到;

b) Java8可以将方法作为参数传递,这是在以前版本所不具有的,文中称这为一等函数,达到了与值(一等公民)的权利

2 . Lambda表达式

实现了把代码传给方法的方式,能够少些代码,而且可以实现解耦与代码复用,而且看起来很有条理,而且提供了并行以及自定义收集器,而且进行数据的统计的时候非常方便

1.匿名/函数/传递/简洁

 2.函数式接口(@functionalinterface)/函数描述符(函数式接口的抽象方法的签名基本上就是Lambda表达式的签名,我们将这种方法叫做函数描述符,例如Runnable接口可以看作是一个什么也不接受什么也不返回的函数签名)。

3.环绕执行模式(try(BufferedReader br=new BufferedReader(new FileReader("data.txt")))){},这样只能够读取1行,如果2行,需要封装成个processFile((BufferedReader br)->br.readLine()+br.readLine())--->所以需要自定义一个功能函数接口并且自主抛出异常(return p.process(br))。 

4.几个新的函数式接口:

       1.Predicate test()方法 -->T->Boolean

        2.Consume的accept()方法--->T->()

        3.Supplier的get()方法--->()->T

        4.Function的apply()方法----》将T转换成R

        5.UnaryOperator<T>--->extends Function(表示操作符,可用于计算)

        6.BiFunction/BiPredicate/BinaryOperate(Extends BiFunction)(Bi表示接受两个函数返回1个)

5.泛型(伪泛型)+(泛型数组)+(泛型擦除(Object/边界))+频繁的拆装箱(IntPredicate/LongPredicate(泛型特化))

6.任何函数式接口都不允许抛出受检异常(异常分为Error与Exception,Exception分为运行时异常(RuntimeException及其子类)与非运行时异常(编译异常,必须手动抛出捕获异常,否则或报错,如IOException与ClassNotFoundException)),所以需要lambda表达式来抛出异常的话 1.自己通过@FunctionalInterface来定义一个函数式接口,里面定义的方法throws IOException和自己用try/catch来显示定义异常。

7.类型检查/类型推断以及限制( Callable<Integer> c=()->42;  PrivilegeAction<INteger> p=()->42;(Java的安全模型里面的,用于某些具有优先级的判断))。只要函数式接口要求的类型转换满足,同一个Lambda表达式就可以作用于不同的函数式接口。Java7引入的菱形运算符,利用泛型推断从上下文推断类型的思想。(注:特殊的void兼容:void可以兼容是语句表达式的 如:Predicate<String> p=s->list.add(s) 和Consume<String> b=s->s.add(s));类型推断是Lambda可以省略具体类型的基础;

8.Lambda表达式可以没有限制的捕获实例变量和静态变量,但局部变量有限制(必须显示或者隐式的是final的),也就是只能捕获指派给他们的局部变量一次。(因为实例变量保存在堆里面,堆中可以共享,但局部变量保存在栈里面,而且隐式表明他们仅限于当前线程)。

9.方法引用 Comparator::comparing ArrayList::new 对构造函数进行引用 1个变量 supplier=Constructor::new get 2个变量用function=ConStruction::new apply 3个变量的话可以自己构造可以接受3个变量的Function函数。

10.Lambda表达式的复合(多个Lambda表达式复合成复杂的表达式); 1.比较器复合 Comparing.thenComparing 2.谓词复合and or(从左到右确定优先级)3.函数复合 f.andThen(g)--g(f(x))  f.compose(g)--f(g(x)) 

二、函数式数据处理 


这一部分是整本书的核心部分,里面每个章节都要细看(filter, skip, limit, reduce, map, findAny, forEach,collect)

三、高效Java8编程 


1. 默认方法: 这算是Java8的一大亮点吧 
2. 引入Optional替代null: 从Guava中引入但又只是个半成品,说有用也是有用的,说没有用也可以,使用Optional应该是一种理念吧。 
3. 新的日期时间API: 从joda引入但依然是半成品,并没有感觉出相对于现在Date&Calendar&Joda有什么优势,比较鸡肋的补充

三、超越Java8

未来面前, 你我皆是黑马 

 

原文转载至

https://blog.csdn.net/cockroach02/article/details/81335636 《Java8 实战》读后笔记

https://blog.csdn.net/qq1782/article/details/81228470 读书笔记之《Java8实战》 
 

https://www.cnblogs.com/jcjssl/p/9465348.html  java8新特性, 用代码来打开

 

转载于:https://my.oschina.net/java1314/blog/3081464

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值