目录

一、Java8的新特性

二、并行流与串行流

三、Lamdba表达式

四、函数式接口

4.1、什么是函数式接口 

4.2、为什么需要函数式接口 

4.3、api中函数式接口所在的包 

4.4、4个基本的函数式接口  

一、Java8的新特性

1、速度更快 2、代码更少 3、强大的Stream APL 4、便于并行 5、最大化减少空指针异常

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

二、并行流与串行流

1、并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。

并行的流可以很大程度上提高程序的执行效率。

2、Stream APL可以声明性地通过parallel()与sequential()在并行流与顺序流之间的切换。

三、Lamdba表达式

Lamdba是一个匿名函数,也就是一段可以传递的代码。可以写出更简洁、更灵活的代码,使Java的语言表达能力更强,lambda的本质是作为函数式接口的实例。

示例代码:

public class LambdaTest {
    @Test
    public void test1(){
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("你是老六");
            }
        };
        runnable.run();
        System.out.println("----使用lambda操作----");
        Runnable runnable1 = ()-> System.out.println("老六是你");
        runnable1.run();
    }
    @Test
    public void test2() {
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        int compare = comparator.compare(11, 12);
        System.out.println(compare);
        System.out.println("----使用lambda操作----");
        Comparator<Integer> comparator1 = ((o1, o2) -> Integer.compare(o1,o2));
        int compare1 = comparator1.compare(56, 34);
        System.out.println("compare1 = " + compare1);
        System.out.println("----使用lambda操作2----");
        Comparator<Integer> comparator2 = Integer::compare;
        int compare2 = comparator2.compare(57, 45);
        System.out.println("compare2 = " + compare2);
    }
}

 语法介绍:

public class LambdaTest1 {
    @Test
    public void Test01(){
        /**
         * -> :lambda操作符,又叫箭头操作符
         * ->:左边是lambda的形参列表,即接口中的抽象方法的形参列表
         * -> 右边是lambda体,即重写的抽象方法的方法体
         */
        Runnable runnable = () -> System.out.println("5G");
        runnable.run();
    }
}

lambda不同的语法

public class LambdaTest1 {
    @Test
    public void test1(){
        /**
         * 无参,无返回值
         * 普通写法
         */
        Runnable runnable = new Runnable(){
            @Override
            public void run() {
                System.out.println("猫和老鼠");
            }
        };
        runnable.run();
        System.out.println("********lambda表达式*******");
        Runnable runnable1 = () ->  System.out.println("lambda的猫和老鼠");
        runnable1.run();
    }
    @Test
    public void test2(){
        /**
         * 有一个参数,无返回值
         * 普通写法
         */
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("虹猫蓝兔仗剑走天涯");
        System.out.println("********lambda表达式*******");
        Consumer<String> consumer1 = (o) -> System.out.println(o);
        consumer1.accept("lambda虹猫蓝兔仗剑走天涯");
    }
    @Test
    public void test3(){
        Comparator<String> comparator = new Comparator<>(){
            /**
             *有两个参数,有返回值,执行多条语句
             */
            @Override
            public int compare(String o1, String o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(comparator.compare("汤姆", "杰瑞"));
        System.out.println("********lambda表达式*******");
        Comparator<String> comparator1 = (o1, o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        System.out.println(comparator1.compare("红猫", "红猫"));
    }
}

四、函数式接口

4.1、什么是函数式接口 

接口中只声明了一个抽象方法,那么这个接口就称为函数式接口。

4.2、为什么需要函数式接口 

因为只有函数式接口提供实现类的对象时,才可以使用lambda表达式

4.3、api中函数式接口所在的包 

jdk8中声明在java.util.function包下。

4.4、4个基本的函数式接口  

          接口                                        方法

消费型接口:Consumer<T>            void accept(T t)

供给型接口:  Supplier<T>                T  get()

函数型接口:  Function<T,R>            R apply(T t)

判断型接口:  Predicate<T>              boolean test(T t)