lambda表达式简单使用

一,适用场景:

  • 1,接口有且只有一个抽象方法;
  • 2,方法的入参中有参数为接口的实例

此时在调用该方法时就可以使用lambda表达式了

二,使用

1,先来个简单例子

/**
 * @description:
 * @author: kismet
 * @create: 2018-11-30 15:45
 */
public class Test {
    //接口
    public interface MyInterface {
        //1,只能有一个抽象方法
        void method(); //无参数无返回
    }

    /**
     * Title: lambdaMethod Description: 调用lambda接口的方法
     *
     * @param myInterface 接口MyInterface的实例
     * @return
     * @author kismet
     * @date 2018/11/30 16:06
     */
    public static void lambdaMethod(MyInterface myInterface) {//2:有参数为,接口的实例
        //TODO 业务
        System.out.println("调用接口实现方法前");
        myInterface.method();
        System.out.println("调用接口实现方法后");
        //TODO 业务
    }


    public static void main(String[] args) {

        //java8之前方式
        lambdaMethod(new MyInterface() {
            @Override
            public void method() {
                System.out.println("接口方法实现:无参数");
            }
        });

        //lambda表达式方式
        lambdaMethod(() -> System.out.println("接口方法实现:无参数"));
    }
}

说明:

  • 1,由于为了直观显示,直接将接口定义在类里面了;
  • 2,运行结果
    调用接口实现方法前
    接口方法实现:无参数
    调用接口实现方法后
    调用接口实现方法前
    接口方法实现:无参数
    调用接口实现方法后

2,再来看看有参数,有返回的

/**
 * @description:
 * @author: kismet
 * @create: 2018-11-30 15:45
 */
public class Test4Param {
    //接口
    public interface MyInterface {
        //1,只能有一个抽象方法
        int method(String str); //有参数,有返回
    }

    /**
     * Title: lambdaMethod Description: 调用lambda接口的方法
     *
     * @param myInterface 接口MyInterface的实例
     * @param str
     * @return
     * @author kismet
     * @date 2018/11/30 16:06
     */
    public static void lambdaMethod(String str, MyInterface myInterface) {//2:有参数为,接口的实例
        //TODO 业务
        System.out.println("调用接口实现方法前");
        int length = myInterface.method(str);
        System.out.println("字符串的长度为==>" + length);
        System.out.println("调用接口实现方法后");
        //TODO 业务
    }


    public static void main(String[] args) {
        //java8之前方式
        lambdaMethod("求字符串长度", new MyInterface() {
            @Override
            public int method(String str) {
                return str.length();
            }
        });
        //lambda表达式方式
        lambdaMethod("lambda求字符串长度", x -> x.length());
    }
}

说明:可以看出有无参数或者返回区别在于lambda表达式的书写形式上;我们来看看lambda的主要几种书写形式

    1. 不需要参数,返回值为 5
      () -> 5
    1. 接收一个参数(数字类型),返回其2倍的值
      x -> 2 * x
    1. 接受2个参数(数字),并返回他们的差值
      (x, y) -> x – y
    1. 接收2个int型整数,返回他们的和(参数类型其实也可以省略)
      (int x, int y) -> x + y
    1. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
      (String s) -> System.out.print(s)
    1. 多行时使用{};在返回值前面加上return就行
      () -> {
      int i = 3 + 5;
      return i;
      }

3,lambda双冒号::的使用

	List<String> strings = new ArrayList<>();

        strings.add("1");
        strings.add("12");
        strings.add("123");

        strings.forEach(System.out::println);//2,表示调用System.out的println方法
        strings.forEach(String::length);//1,表示调用String的length方法

双冒号XX::yy表示调用XX的的yy方法,如上所示有两种情况

  • 1>当yy为无参方法时,表示循环调用集合中每个XX实例的yy()方法;
    如上面代码中表示循环调用集合中每个String实例的length()方法;
  • 2>当yy为有参方法时,表示调用XX的有参方法yy(XX,xx);并且参数类型为XX,这样就把集合中的每个XX作为yy方法的入参;
    如上面代码中表示循环调用System.out的println方法,并且入参为集合中的每个String实例;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章