JavaEE 学习专题技术干货

1.Java8新特性 - Lambda表达式学习笔记

2018-10-22  本文已影响251人  Mr_欢先生

一.Lamdba 表达式的基础语法

Lamdba是一个匿名函数,Lamdba表达式是一段可以传递的代码。
Java8 中引用了一个新的操作符,-> 该操作符成为箭头操作符或者是Lamdba操作符,箭头操作符将Lamdba表达式拆分成两部分:参数列表 -> 执行的功能

二.Lambda表达式的重要特征

三.Lamdba表达式的实例

1.无参数,无返回值类型

    @Test
    public void test1() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World!");
            }
        };
        runnable.run();
        //等价于
        Runnable runnable1 = () -> System.out.println("Hello World!");
        runnable1.run();
    }

2.有一个参数,并且无返回值(只有一个参数,小括号可以省略)

@Test
    public void test2(){
        Consumer consumer1 = new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println(o);
            }
        };
        consumer1.accept("Hello World");
        //等价于
        Consumer consumer2 = item -> System.out.println(item);
        consumer2.accept("Hello World");
    }

3.有两个以上的参数,有返回值(一条语句可以省略return 和大括号)

@Test
    public void test3(){
        Comparator<Integer> comparator = (x, y) -> Integer.compare(x,y);
    }

四.Lamdba表达式需要「函数式接口」的支持

函数式接口:接口中只有一个抽象方法的接口,成为函数式接口,可以用注解@FunctionalInterface修饰来检查是否是函数式接口

import org.junit.Test;

@FunctionalInterface
interface DemoInterface {
    int value(int num);
}

public class Lambda {
    @Test
    public void test() {
        int value = operation(10,num -> num * 2);
        System.out.println(value);
    }

    public int operation(Integer x, DemoInterface demo){
        return demo.value(x);
    }
}

注意:

lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在lambda 内部修改定义在域外的局部变量,否则会编译错误。

上一篇 下一篇

猜你喜欢

热点阅读