Java8新特性——lambda表达式

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8新特性——lambda表达式相关的知识,希望对你有一定的参考价值。

其实有规律,总结一下规律就行

package lambda;
/*
lambda表达式的使用

1.举例:()->Integer.compare(o1,o2);
2.格式:
    lambda形参列表(接口中的抽象方法形参列表) -> lambda体(重写抽象方法的方法体)
3.lambda表达式的使用
    总结:
    lambda左边的形参列表的参数类型可以省略,如果lambda只有一个参数,那么()也可以省略
    lambda右边的lambda体用{}包裹,如果只有一条语句,则{}可以省略。如果有返回值,必须省略return关键字
4.java里lambda表达式的本质:函数对象,就是抽象类里有一个抽象方法,lambda就被作为一个函数对象,去实现这个抽象方法

@author zsben
@create 2020-01-09 17:19
*/

import org.junit.Test;

import java.util.Comparator;
import java.util.function.Consumer;

public class LambdaTest {
    @Test
    public void test1(){
        //情形一:
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();

        System.out.println("*****************************************");

        Runnable r2 = () -> {
            System.out.println("我爱北京故宫");
        };
        r2.run();
    }
    @Test
    public void test2(){
        //情形二:lambda需要一个参数,但是没有返回值
        Consumer<String> con1 = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con1.accept("lambda2");

        Consumer<String> con2 = s -> {
            System.out.println(s);
        };
        con2.accept("lambda");
    }

    @Test
    public void test3(){
        //情形三:数据类型可以省略,由编译器"类型推断"得出
        Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };
        con1.accept("lambda3");

        System.out.println("**************************************");
        Consumer<String> con2 = (s) -> {
            System.out.println(s);
        };
        con2.accept("lambda3");
    }

    @Test
    public void test4(){
        //语法格式四:lambda若只有一个参数,参数的小括号可以省略
        Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };
        con1.accept("lambda4");

        System.out.println("**************************************");

        Consumer<String> con2 = (s) -> System.out.println(s);
        con2.accept("lambda4");
    }

    @Test
    public void test5(){
        //语法格式五:lambda需要两个或以上的参数,多条执行语句,并且可以有返回值
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(com1.compare(1, 2));

        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(1,2));
    }

    @Test
    public void test7(){
        //语法格式六:lambda体只有一条语句时,可以省略{},如果有返回值,必须省略return
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        System.out.println(com1.compare(1, 2));

        System.out.println("****************************************");

        Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);
        System.out.println(com2.compare(1,2));
    }

}

以上是关于Java8新特性——lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

Java8新特性之一:Lambda表达式

Java8新特性--Lambda表达式

Java8新特性-Lambda表达式

Java8新特性-Lambda表达式

java8新特性之Lambda表达式入门

java8新特性之——lambda表达式的使用