Java8新特性

速度更快

优化HashMap 实现

底层结构使用红黑树实现,查询速度提升了

代码更少

函数式接口(FunctionalInterface)

只包含一个抽象方法的接口被称为函数式接口,可用注解:@FunctionalInterface标注检查,并防止被修改

Java 内置四大核心函数式接口

Comsumer 消费型接口
参数:T ,返回类型:void,包含方法:void accept(T t);

Supplier 供给型接口
参数:无,返回类型:T, 包含方法:T get();

Function<T,R> 函数型接口
参数T,返回R 包含方法:R apply(T t);

Predicate 断定型接口
参数 T,返回 boolean,包含方法:boolean test(T t);

Lambda表达式

Lambda表达式本质上就是函数式接口的一个实例

lambda表达式的六种写法
package Java8;

import org.junit.Test;
import java.util.Comparator;
import java.util.function.Consumer;
public class LambdaTest {
    /**
     * ->左侧:lambda形参列表的参数类型可省略(类型推断);如果lambda形参列表只有一个参数,则参数括号可省。
     * ->右侧:lambda方法体只有一条语句,大括号与return可省
     * 依赖于函数式接口
     * lambda本质:作为函数式接口的实例
     */
    // Lambda表达式的本质是作为接口的实例
    //1 无参 无返回值
    @Test
    public void test1(){
        Runnable runnable = () -> System.out.println("无参 无返回值");
    }
    @Test
    public void test2(){
        //普通写法
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("有参 无返回 普通写法");

        // Lambda 表达式写法 显示类型
        Consumer<String> co1 = (String s) -> {System.out.println(s);};
        co1.accept("lambda 写法2");
        // 类型推断
        Consumer<String> co2 = (s) -> {System.out.println(s);};
        co2.accept("lambda 写法3");
        // 参数为1 时,形参括号可省
        Consumer<String> co3 = s -> {System.out.println(s);};
        co3.accept("lambda 写法4");
        //执行语句唯一时,大括号可省,return 也可省
        Consumer<String> co4 = s -> System.out.println(s);
        co4.accept("lambda 写法5");
    }
    @Test
    public void test3(){
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        System.out.println(com1.compare(1,2));
        //多个参数一条语句
        Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);
    }
}

方法引用、构造器引用

方法引用

方法引用可以看作是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。

使用格式

  1. 类 :: 非静态方法
  2. 类 :: 静态方法
  3. 对象 :: 非静态方法
    要求:接口中的抽象方法的形参列表和返回值类型与方法引用相同
        Consumer<String> co =  System.out :: println;
        co.accept("方法引用");
构造器引用

与方法引用类似,函数式接口的抽象方法的形参列表与构造器一致,抽象方法的返回值类型与

    Supplier<Coffee> coffeeBuild = Cappuccino::new;
    Coffee cof = coffeeBuild.get();
    System.out.println(cof.getClass().getSimpleName());

强大的 Stream API

可以极大地提供Java程序员的生产力,让程序员写出高效、干净、简洁的代码。
Stream API提供了
Stream与Collection的区别,集合是处理数据的,Stream计算
Stream 是延迟执行的

  1. 创建Stream:获取一个流
  2. 中间操作
  3. 终止操作

便于并行

最大化减少空指针异常:Optional

Nashorn引擎,允许在JVM上运行JS应用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值