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的对象。

猜你喜欢

转载自blog.csdn.net/huihuishou_su/article/details/78921567
今日推荐