Java Lambda 学习

允许通过表达式来代替功能接口,
提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)

1、基本格式:

() -> {}

(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
    statment1;
    statment2;
    ...
    return resultStatement;
}

2、简单示例:

// 不需要参数,返回值1
() -> 1
  
// 一个参数(数字类型),返回其2倍的值(当参数个数只有一个时,可以省略小括号)
x -> 2 * x
  
// 2个参数(数字),返回差值(参数类型省略,一般情况下,编译器会从上下文环境中推断出参数类型)
(x, y) -> x – y
  
// 2个int型整数,返回和值(当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号)
(int x, int y) -> x + y
  
// 一个 string类型的参数,在控制台打印,无返回值(返回void)
(String s) -> System.out.print(s)

3、Button点击事件举例:
使用前:

btnClick.setOnClickListener(new View.OnClickListener() {    
    @Override
    public void onClick(View v) {
        Toast.makeText(LambdaActivity.this, "吼吼吼", Toast.LENGTH_SHORT).show();
    }
});

使用后(alt+enter):

btnClick.setOnClickListener(v -> Toast.makeText(LambdaActivity.this, "吼吼吼", Toast.LENGTH_SHORT).show());

4、Thread实现Runnable举例:
使用前:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world !");
    }
}).start();

使用后:

new Thread(() -> System.out.println("Hello world !")).start();
或
new Thread(() -> {
    System.out.println("Hello world !");
}).start();

5、双冒号表达式:方法引用,直接通过方法名称引用已有方法。
举例:
使用前:

Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello world !");
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

使用后:

Observable.create((Observable.OnSubscribe<String>) subscriber -> subscriber.onNext("Hello world !"))
.subscribe(System.out::print);

6、方法引用分类:

静态方法引用:ClassName::methodName
实例上的实例方法引用:instanceReference::methodName
超类上的实例方法引用:super::methodName
类型上的实例方法引用:ClassName::methodName
构造方法引用:Class::new
数组构造方法引用:TypeName[]::new
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容