java8新特性之Lambda表达式

Lambda表达式

Lambda是一个匿名函数,咱们能够把Lambda表达式理解为是一段能够传递的代码(将代码像数据同样进行传递)。能够写出更简洁、更灵活的代码。做为一种更紧凑的代码风格,是Java的语言表达能力获得了提高。(能够理解为是对接口的一段实现代码)

Lambda表达式初体验

开一个线程,打印hello lambda!
// 开一个线程 打印 hello
    @Test
    public void test00() {
        // 以前的写法
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello lambda!");
            }
        });
        thread.run();
        // lambda写法
        Thread thread1 = new Thread(() -> System.out.println("hello lambda!"));
        thread1.run();
    }
看起来Lambda表达式写起来是否是更加优雅,简短。

Lambda表达式语法

Lambda表达式在Java 语言中引入了一个新的语法元素和操做符。这个操做符为 “->” , 该操做符被称 为Lambda操做符或箭头操做符。它将 Lambda 分为 两个部分,左侧:指定了Lambda表达式须要的全部参数 右侧:指定了Lambda体,即Lambda表达式要执行的功能

语法格式一

Lambda表达式不须要参数时候,没有返回值时,Lambda体只须要一条语句
@Test
    public void test01() {
        //  Runnable 接口 线程的接口
        Runnable runnable = () -> System.out.println("hello lambda!");
        // 调用方法
        runnable.run();
    }

语法格式二

Lambda体,没有返回值,须要一个参数
@Test
    public void test02() {
        //  Consumer 接口 1.8才有的 表示接受单个输入参数而且不返回任何值的一个操做
        Consumer consumer = (msg) -> System.out.println(msg);
        // 调用方法  accept接收任意参数 T
        consumer.accept("hello lambda!");
    }

语法格式三

Lambda体,没有返回值,须要一个参数时,参数的小括号能够省略
@Test
    public void test03() {
        //  Consumer 接口 1.8才有的 表示接受单个输入参数而且不返回任何值的一个操做
        Consumer consumer = msg -> System.out.println(msg);
        // 调用方法  accept接收任意参数 T
        consumer.accept("hello lambda!");
    }

语法格式四

Lambda体,没有返回值,须要两个参数时,而且有返回值
@Test
    public void test04() {
       // Comparator 接口 一个比较的操做
        Comparator<Integer> comparator = (Integer x, Integer y) -> {
            System.out.println("实现接口的方法:");
            //   这里调用了 Integer  compare 比较方法 比较两个值的大小 返回 -1(<) 0(=) 1(>)
            return Integer.compare(x, y);
        };
        //  调用方法
        System.out.println(comparator.compare(12, 13));
    }

语法格式五

Lambda体只有一条语句时,有返回值时,return与大括号能够省略
@Test
    public void test05() {
        // Comparator 接口 一个比较的操做
        //   这里调用了 Integer  compare 比较方法 比较两个值的大小 返回 -1(<) 0(=) 1(>)
        Comparator<Integer> comparator = (Integer x, Integer y) -> Integer.compare(x, y);
        //  调用方法
        System.out.println(comparator.compare(12, 13));
    }

语法格式六

Lambda表达式的参数类型能够省略,可由编译器根据上下文推断得出类型:类型推断
@Test
    public void test06() {
        // Comparator 接口 一个比较的操做 
        Comparator<Integer> comparator = (x, y) -> {
            // (x,y) 数据类型能够省略,可由编译器根据上下文推断得出类型,
            System.out.println("实现接口的方法:");
            //这里调用了 Integer  compare 比较方法 比较两个值的大小 返回 -1(<) 0(=) 1(>)
            return Integer.compare(x, y);
        };
        //  调用方法
        System.out.println(comparator.compare(12, 13));
    }

个人小结

lambda表达式像是一个代码片断,由 ‘->’(箭头操做符)分为两部分,左侧为参数列表,参数类型能够省略不写,右侧为lambda体,其实就是接口的实现代码。

文章首发于 黑猫のBlog 欢迎来留言啊!!!java

相关文章
相关标签/搜索