2-Lambda(一)

定义

Lambda 它来自于学术界开发出来的一套用来描述计算的λ演算法.
 匿名——我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而想
得多!
 函数——我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。
 传递——Lambda表达式可以作为参数传递给方法或存储在变量中。

Lambda 的基本语法是

(parameters) -> expression
或(请注意语句的花括号)
(parameters) -> { statements; }

用在哪里?

用在函数式接口,什么是函数式接口?好的,我们简单道来~
函数式接口指的是只有一个抽象方法的接口
注意Java8以后:接口现在还可以拥有默认方法(即在类没有对方法进行实现时,
其主体为方法提供默认实现的方法)。哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口。

@FunctionalInterface又是怎么回事?
新的Java API,会发现函数式接口带有@FunctionalInterface的标注。这个标注用于表示该接口会设计成一个函数式接口。如果你用@FunctionalInterface定义了一个接口,而它却不是函数式接口的话,编译器将返回一个提示原因的错误。

接下来看看我们Java8带来了哪些函数式接口

  • 一Predicated的使用
    java.util.function.Predicate接口定义了一个名叫test的抽象方法,它接受泛型
    T对象,并返回一个boolean
@FunctionalInterface
public interface Predicate<T>{
         boolean test(T t);
}
public static <T> List<T> filter(List<T> list, Predicate<T> p) {
        List<T> results = new ArrayList<>();
         for(T s: list){
             if(p.test(s)){
                results.add(s);
              }
          }
        return results;
}
Predicate<String> nonEmptyStringPredicate =
                               (String s) -> !s.isEmpty();
List<String> nonEmpty = filter(listOfStrings,                   nonEmptyStringPredicate);
  • Consumer
java.util.function.Consumer<T>定义了一个名叫accept的抽象方法,它接受泛型T的对象,没有返回(void)。你如果需要访问类型T的对象,并对其执行某些操作,就可以使用这个接口
  • Function
 - Function
java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值