JDK1.8之Lambda解析与表达式的使用

简介:

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。

Java1.8的新特性
Lambda表达式
函数接口
流式操作
Lambda表达式 就是 匿名函数 在jdk1.7版本以前叫做匿名内部类,JDK1.8后对匿名内部类的升级简化,在JDK1.8的Lambda 表达式中增加 ->的运算符
运算符左边是 表达式的 (参数列表), 运算符的右边 就是方法体,如果没有参数或者是 返回值的话()不用写 。如果从写方法的话又多句的话加上大括号(int a, int b){ int c=a+b return c;}
看看一下具体的实现

1.在1.8之前的匿名内部类

  public static void main(String[] args) {
        
        TestService testService = new TestService() {
            @Override
            public void stu() {
                System.out.println("我是1.8之前的匿名内部类"); 
           }
        };
        testService.stu();
    }

JDK1.8之Lambda解析与表达式的使用_第1张图片
2.Lambda表达式的写法

     public static void main(String[] args) {
        

        TestService testService1 =() -> System.out.println("我是1.8后的Lambda表达式");
        testService1.stu();

    }

JDK1.8之Lambda解析与表达式的使用_第2张图片
匿名内部类一个参数

public static void main(String[] args) {


        TestService testService1 = new TestService() {
            @Override
            public void stu(int a) {
                System.out.println("匿名内部类:"+(a+4));
            }
        };
        testService1.stu(4);
    }

JDK1.8之Lambda解析与表达式的使用_第3张图片

Lambda 有一个参数的可以把小括号去掉可加可不加

  public static void main(String[] args) {


        TestService testService1 = n -> System.out.println("就一个参数小括号可以去掉"+(n+4));
        testService1.stu(4);
    }

JDK1.8之Lambda解析与表达式的使用_第4张图片

而两者对比就可以看出JDK1.8 Lambda的写法更简洁更高效。

3.匿名内部类返回值加参数写法:

 public static void main(String[] args) {


        TestService testService1 =new TestService() {
            @Override
            public Integer stu(Integer a, Integer b) {
                Integer c=a+b;
                return c;
            }
        };
        Integer stu = testService1.stu(1, 2);
        System.out.println("匿名内部类 返回值加参数:"+stu);
    }

JDK1.8之Lambda解析与表达式的使用_第5张图片

4有返回值和参数 Lambda表达式

	   public static void main(String[] args) {


        TestService testService1 =(a, b) -> {
            Integer c =a+b;
            return c;
        };
        Integer stu = testService1.stu(4, 5);
        System.out.println("返回值+参数:"+stu);
    }

JDK1.8之Lambda解析与表达式的使用_第6张图片
写法2 如果就一行的话可以把大括号去掉 和return 去掉

   public static void main(String[] args) {


        TestService testService1 =(a, b) -> a+b;

        Integer stu = testService1.stu(4, 5);
        System.out.println("返回值+参数:"+stu);
    }

JDK1.8之Lambda解析与表达式的使用_第7张图片

待续......  .......  ......  ....    ..........  ................  ............. ... ... ..

你可能感兴趣的:(jdk)