java的lambda表达式


  • java lambda表达式可以代替匿名内部类,一个经典的例子是多线程的Thread类,构造函数中的runnable接口中的run方法可以用lambda表达式代替
    之前:
   @Test
    public void oldRunable() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The old runable now is using!");
            }
        }).start();
    }

之后:

    @Test
    public void runable() {
        new Thread(() -> System.out.println("It's a lambda function!")).start();
    }
  • 可以将lambda表达式理解为匿名函数
  • Lambda表达式能够让程序员的编程更加高效
  • Lambda表达式的语法:
    ([Lambda参数列表,即形参列表]) ->
  • Lambda表达式的分类
  • 无参无返回值
	public class TestLambda {
    public static void main(String[] args) {
        new Thread(() -> System.out.println("Hello"));
    }
}
  • 有参无返回值
public class TestLambda {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("AAAAA");
        list.add("BBBBB");
        list.add("CCCCC");
        list.add("DDDDD");
//形参的类型是确定的,可省略;只有一个形参,()可以省略;
        list.forEach(t -> System.out.print(t + "\t"));
//或者更简洁的方法引用:list.forEach(System.out::println);
        //打印结果:AAAAA	BBBBB	CCCCC	DDDDD
    }
}
  • 有参有返回值
  • 无参有返回值
  • 每一个Lambda表达式能隐式的给函数式接口赋值,如runnable例子中lambda将打印方法传递给runnable接口的run()方法
  • 自定义函数接口
package com.isea.java;
@FunctionalInterface
public interface IMyInterface {
    void study();
}
 
package com.isea.java;
public class TestIMyInterface {
    public static void main(String[] args) {
        IMyInterface iMyInterface = () -> System.out.println("I like study");
        iMyInterface.study();
    }
}//这里的Lambda表达式将方法体赋值给函数式接口


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM