• java8新特性1:lambda表达式和函数式接口


    1、lambda的介绍:

    1.1、为什么java语言需要引入lambda表达式?

    java语言诞生于1995年,历史时间已经相对较长了。在其后的各种新型编程语言中,都有着lambda表达式的内容,并且受到了大家的好评,因此,java语言也相想要“抄”过来。(小声逼逼)下面是一个较为官方的解释:

    1.2、python中的lambda表达式

    a = lambda x,y,z:(x+8)*y-z
    

    1.3、js中ES6语法中的lambda表达式(又称为箭头函数)

    function foo() {
      this.a = 1
      let b = () => console.log(this.a)
    
      b()
    }
    

    1.4、其他、就不一一列举了

    2、java中的六种lambda的写法

    java中lambda的本质:作为接口的实例

    2.0、普通写法

    @Test
    public void test01() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello java8");
            }
        };
    
        r1.run();
    }
    

    2.1、语法格式一:无参、无放回值的写法

    @Test
    public void test2() {
        //Lambda表达式的写法
        Runnable r = () -> System.out.println("hello java8");
    }
    

    2.2、语法格式二:Lambda 需要一个参数,但是没有放回值

    @Test
    public void test3() {
        Consumer<String> con = (String s) -> {
            System.out.println("ssssss");
        };
        con.accept("sss");
    }
    

    2.3、语法格式三:数据类型可以省略,因为可以由编译器推断得出,成为“类型推断”

    @Test
    public void test4() {
        Consumer<String> con = (s) -> {
            System.out.println("ssssss");
        };
        con.accept("sss");
    }
    

    2.4、语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略

    @Test
    public void test5() {
        Consumer<String> con = s -> {
            System.out.println("ssssss");
        };
        con.accept("sss");
    }
    

    2.5、语法格式五:Lambda 需要两个或者两个以上的参数,多条执行语句,并且可以有放回值

    @Test
    public void test6() {
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
    
        System.out.println(com1.compare(3,5));
        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(3,5));
    }
    

    2.6、语法格式六:当Lambda 体只有一条语句时,return 与大括号若有,都可以省略

    @Test
    public void test7() {
        Comparator<Integer> com2 = (o1, o2) -> o1.compareTo(o2);
        System.out.println(com2.compare(3,5));
    }
    

    3、函数式接口

    函数式接口的使用,使的我们可以将方法当作参数来传递。在调用时,lambda 表达式作为参数来使用。换句话说,当一个方法的参数是 lambda 表达式时,这个参数类型一定是函数式接口。

    下面是一个函数接口的例子:

    /**
     * 函数式接口,只有一个抽象方法的接口
     */
    @FunctionalInterface
    public interface MyInterface {
        void method1();
    //    void method2();
    }
    

    java内置的4大核心函数式接口:

    使用举例

    其他的一些函数式接口:

  • 相关阅读:
    ToString格式化
    [转]vc中socket编程步骤
    [XAML学习资料] 验证用户提供的数据ValidationRule
    VS2008下安装boost
    [ASP.NET用户验证一]Forms验证
    VISTA IIS Worker Process 已停止工作 解决办法
    [MFC入门二]四种不同对象
    删除TFS项目
    [WPF学习资料] WPF简介
    IIS7下配置PHP5
  • 原文地址:https://www.cnblogs.com/xgp123/p/12288512.html
Copyright © 2020-2023  润新知