Java8

Java 8 新特性

Java 8 又称 JDK 1.8,速度更快,便于并行,JVM 上可以运行 JS 应用.

最重要的两个新特执 Lambda, Stream API

接口的增强

  • 静态方法

  • 默认方法

提供了新的日期 API

注解

  • 重复注解

  • 类型注解

集合 引入红黑树

JDK 的更新

新的编译工具

  • jjs

  • jdeps

JVM

Meta space 取代 PermGen 空间

其它

通用目标类判断


Lambda 表达式

(chapter 23)

语法层面的改变,箭头操作符,简化匿名内部类,匿名内部类中只有一个抽象方法,只能重写此方法

= () -> 方法体

  • -> : lambda 操作符,箭头操作符

  • ():lambda 形参列表,抽象方法的形参列表

  • 方法体:lambda 方法体

lambda 表达式的六种使用:

  1. 无参数无返回

  2. 需要一个参数,但是没有返回值

  3. 数据类型可以省略,编译器可以自己推断

  4. 若参数只有一个,小括号也可以省略

  5. 方法体用{ },可以写多条处理语句和返回值

  6. 只有一条语句是可以省略{},这条语句有 return 时 也可省略

lambda 表达式的总结:

  • 对于参数列表(),可以省略类型,若只有一个参数还可以省略()

  • 对于方法体{},可以写多条处理语句。若只有一条,可以省略{}。若只有 return,省略 return。

lanmda 表达式的本质:作为函数接口的实例,接口中只有一个抽象方法,只能重写此方法。

public class LambdaTest {
    @Test
    public void test1(){
        Runnable r1 =  new Runnable() {
            @Override
            public void run() {
                System.out.println("为引入 lambda");
            }
        };
​
        r1.run();
​
        Runnable r2 = () -> System.out.println("引入 lambda");
​
        r2.run();
    }
​
    @Test
    public void test2(){
       Comparator<Integer> com1 = new Comparator<Integer>() {
           @Override
           public int compare(Integer o1, Integer o2) {
               return Integer.compare(o2, o1);
           }
       };
        System.out.println(com1.compare(12,22));
        //lambda 表达式
        Comparator<Integer> com2 = (Integer o1, Integer o2) ->Integer.compare(o2, o1);
        System.out.println(com2.compare(92,22));
​
        //方法引用
        Comparator<Integer> com3 = Integer :: compare;
        System.out.println(com3.compare(92,22));
    }
}
​

函数式接口

此接口只能有一个方法。

@FunctionalInterface
​

方法引用与构造器引用

本质就是 lambda 表达式,lambda 表达式是函数接口的实例,所以引用也是函数接口的实例。

格式: 类(对象) :: 方法名

方法引用的使用情境:

  • 当要传递给 lambda 体的操作,已经有实现的方法了,可以使用方法引用。

三种情况:

  • 对象 :: 非静态方法

  • 类 :: 静态方法

  • 类 :: 非静态方法(实例方法)

使用要求:要求接口中的抽象方法的形参列表和返回值类型 与 方法引用的方法的形参列表和返回值类型相同(1,2)

构造器引用:和方法引用类似,接口中的抽象方法的形参列表和返回值类型 与 构造器的形参列表和返回值类型相同。抽象发放的返回值类型即为构造器所属的类的类型

数组引用:大家可以把数组看成一个特殊的类,则写法与构造器引用一致。

强大的 Stream API

提供了一种高效且易于使用的处理数据的方式。对数据进行操作、计算。集合讲的是数据,Stream 讲的是计算。

细节:

  • Stream 不会存储元素

  • Stream 不会改变源对象。相反他们返回一个持有结果的新 Stream

  • Stream 操作是延迟执行的,这意味他们会等到需要结果时才执行。

实际开发中,项目的多数数据源来自于 MySql、Oracle 等,但现在数据源更多了,比如 MongDB、Redis 等,而这些(NoSql)的数据就需要 Java 层面去处理。

中间操作:筛选、过滤、映射(map,flatmap)、排序

中止操作:匹配与查找(allMatch、anyMatch、noneMatch)、归约、收集

  • parallel()并行流

  • sequential()顺序流

Optional 类

是一个容器类,把泛型<T>进行一个封装,减少空指针异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值