Java教程

1.Java8新特性简介&Lambda表达式

本文主要是介绍1.Java8新特性简介&Lambda表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

一、Java8新特性简介

特点

二、并行流与串行流

三、为社么要使用Lambda表达式

三、Lambda表达式使用举例

1.Runnable

2.Comprator

(一) Lambda表达式的使用

1.格式

2.语法格式1:无参,无返回值

3.语法格式2:lambda需要一个参数,但是没有返回值

4.语法格式3:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”

5.语法格式4:lambda若只需要一个参数时, 参数的小括号可以省略

6.语法格式5:lambda两个或两个以上的参数,多条执行语句,并且可以有返回值

7.语法格式6:当lambda体只有一条语句时,return与大括号若有,都可以省略

 8.总结

(二)lambda表达式的本质


一、Java8新特性简介

Java8(又称jdk 1.8)是Java语言开发的一个主要版本

Java8是oracle公司于2014年3月发布,可以看成是自Java5以来最具革命性的版本。Java8以Java语言、编译器、类库、开发工具与JVM带了大量的新特性

特点

  • 速度更快

  • 代码更少(增加了新的语法:Lambda表达式

  • 强大的Stream API

  • 便于并行

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

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

二、并行流与串行流

把一个内容分成多个数据块,并用不同的线程分别处理 每个数据块的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率

Java 8中将并行进行了优化,我们可以很容易的对数据进行并行操作

Stream API可以声明性地通过parallel()与sequential()在并行流与顺序流之间进行切换

三、为社么要使用Lambda表达式

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以

+写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java语言表达能力得到了提升 

三、Lambda表达式使用举例

1.Runnable

    @Test
    public void test1(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("新年快乐");
            }
        };
        r1.run();
        System.out.println("****************************");
        Runnable r2 = () -> System.out.println("2022新年快乐");

        r2.run();
    }

2.Comprator

    @Test
    public void test2(){
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        int compare1 = com1.compare(12,21);
        System.out.println(compare1);
        System.out.println("***********************");
        //Lambda表达式的写法
        Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
        int compare2 = com2.compare(32,21);
        System.out.println(compare2);
        System.out.println("***********************");
        //方法引用
        Comparator<Integer> com3 = Integer :: compare;
        int compare3 = com2.compare(50,21);
        System.out.println(compare3);
    }

(一) Lambda表达式的使用

1.格式

(o1,o2) -> Integer.compare(o1,o2);

->  :lambda操作符(箭头操作符)

->左边:lambda形参列表,其实就是接口中的抽象方法的形参列表

->右边:lambda体,其实就是重写的抽象方法的方法体

2.语法格式1:无参,无返回值

    @Test
    public void test1(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("新年快乐");
            }
        };
        r1.run();
        System.out.println("****************************");
        Runnable r2 = () -> System.out.println("2022新年快乐");

        r2.run();
    }

3.语法格式2:lambda需要一个参数,但是没有返回值

    @Test
    public void test2(){
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("你喜欢什么呀");
        System.out.println("**********************");
        Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };
        con1.accept("喜欢小朱");
    }

4.语法格式3:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”

    @Test
    public void test3(){
        Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };
        con1.accept("冬天的句号是春暖花开");
        System.out.println("*****************");
        Consumer<String> con2 = (s) -> {
            System.out.println(s);
        };
        con2.accept("冬天的句号是春暖花开~");
    }
    @Test
    public void test4(){
        ArrayList<String> list = new ArrayList<>();  //类型推断
        int[] arr = {1,2,3}; //类型推断
    }

5.语法格式4:lambda若只需要一个参数时, 参数的小括号可以省略

    @Test
    public void test5(){
        Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };
        con1.accept("冬天的句号是春暖花开");
        System.out.println("****************");
        Consumer<String> con2 = s -> {
            System.out.println(s);
        };
        con2.accept("冬天的句号是春暖花开~");
    }

6.语法格式5:lambda两个或两个以上的参数,多条执行语句,并且可以有返回值

    @Test
    public void test6(){
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(com1.compare(12, 21));
        System.out.println("**********************");
        Comparator<Integer> com2 = (o1,o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        System.out.println(com2.compare(12, 6));
    }

7.语法格式6:当lambda体只有一条语句时,return与大括号若有,都可以省略

    @Test
    public void test7(){
        Comparator<Integer> com1 = (o1,o2) -> {
            return o1.compareTo(o2);
        };
        System.out.println(com1.compare(12, 6));
        System.out.println("**********************");
        Comparator<Integer> com2 = (o1,o2) ->  o1.compareTo(o2);
        System.out.println(com2.compare(12, 21));
    }
    @Test
    public void test8(){
        Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };
        con1.accept("冬天的句号是春暖花开");
        System.out.println("**********************");
        Consumer<String> con2 = s -> System.out.println(s);
        con1.accept("冬天的句号是春暖花开");
    }

 8.总结

->左边:lambda形参列表的参数类型可以省略(类型推断);如果lambda参数列表只有一个参数,其一对小括号也可以省略

->右边:lambda体用一对{ }进行包裹;如果lambda体只有一条执行语句(可能是return语句),可以省略这一对{ }和return关键字

(二)lambda表达式的本质

作为接口的实例:接口只有一个抽象方法

这篇关于1.Java8新特性简介&Lambda表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!