Lambda表达式

Lambda表达式是JAVA8的新特性

匿名类
new Thread( () -> System.out.print(“”));
listA.forEach( (a) -> System.out.print(a));
Predicate过滤
public static void main(args[]){
    List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
    System.out.println("Print language whose length greater than 4:");
    filter(languages, (str)->str.length() > 4);
}
public static void filter(List names, Predicate condition) {
    for(String name: names)  {
        if(condition.test(name)) {
            System.out.println(name + " ");
        }
    }
}

Lambda VS Java匿名内部类
既然lambda表达式即将正式取代Java代码中的匿名内部类,那么有必要对二者做一个比较分析。
1. 一个关键的不同点就是关键字 this。匿名类的 this 关键字指向匿名类,而lambda表达式的 this 关键字指向包围lambda表达式的类。
2. 另一个不同点是二者的编译方式。Java编译器将lambda表达式编译成类的私有方法。使用了Java 7的 invokedynamic 字节码指令来动态绑定这个方法。
3. lambda表达式内可以使用方法引用,仅当该方法不修改lambda表达式提供的参数。本例中的lambda表达式可以换为方法引用,因为这仅是一个参数相同的简单方法调用。

方法引用

方法引用使lambda表达式更简化

view.setOnClickListener(view -> {doSomething(view)})
// 使用方法引用
view.setOnClickListener(this::doSomething});

但要保证引用的方法和回调的参数一致

static methodsMyClass::doSomething
instance method of objectmyObject::doSomething
constructorMyClass:: new
instance method of any argument typeString::compare
默认接口方法

当你往一个接口增加方法时,所有已经实现该接口的类就会变得编译不过,除非这些类能实现新增加的方法
默认接口方法提供的解决方案是,接口里可以定义一个默认的方法,在方法体里有它的默认实现

public interface MyView {
void showProgressbar();
// 关键字 default
default void hideProgressbar() {
// do something here
}
}

Android Studio自动转换Lambda表达式

使用快捷键 alt/option + enter ,将匿名类自动转换成Lambda表达式,或将Lambda表达式转换成方法引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值