lambda表达式,函数式接口,stream接口

lambda表达式

Lambda表达式是 简洁的表示可传递的匿名函数的一种方式。它没有名称,但它有参数列表,函数主体,返回类型,可能还有一个可以抛出的异常列表。

语法规则

引入了一个新的操作符“->”,该操作符在很多资料中,称为箭头操作符,或者lambda操作符;
左侧:lambda表达式的参数列表
右侧:lambda表达式中所需要执行的功能,即lambda函数体

  • 无参数,无返回值的用法 :() -> System.out.println("hello lambda");
    @Test
    public void test1() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello runnable");
            }
        };
        r.run();
        Runnable r1 = () -> System.out.println("hello lambda");
        r1.run();
    }

  • 有一个参数,无返回值的用法: (x) -> System.out.println(x); 或者 x -> System.out.println(x); 一个参数,可以省略参数的小括号
    @Test
    public void test2(){
        Consumer con = (x) -> System.out.println(x);
        con.accept("有一个参数,无返回值的用法(Consumer函数式接口)");
    }
  • 有两个参数,有返回值的:(x, y) -> x + y

    public void test3() {
        BinaryOperator binary = (x, y) -> x + y;
        System.out.println(binary.apply(1, 2));// 3
    }
  • lambda表达式中,多行语句,分别在无返回值和有返回值的抽象类中的用法
    @Test
    public void test4() {
        // 无返回值lambda函数体中用法
        Runnable r1 = () -> {
            System.out.println("hello lambda1");
            System.out.println("hello lambda2");
            System.out.println("hello lambda3");
        };
        r1.run();
 
        // 有返回值lambda函数体中用法
        BinaryOperator binary = (x, y) -> {
            int a = x * 2;
            int b = y + 2;
            return a + b;
        };
        System.out.println(binary.apply(1, 2));// 6
 
    }

lambda的类型推断:在lambda中的参数列表,可以不用写参数的类型,跟java7中 new ArrayList<>(); 不需要指定泛型类型,这样的<>棱形操作符一样,根据上下文做类型的推断。

函数式接口

接口中只有一个抽象方法的接口,称为函数式接口;可以使用@FunctionalInterface注解修饰,对该接口做检查;如果接口里,有多个抽象方法,使用该注解,会有语法错误。

stream接口

你可能感兴趣的:(lambda表达式,函数式接口,stream接口)