jdk8-Lambda简介

为何使用Lambda

Lambda能够使表达更加简洁,jdk8以前要想向方法传入一个函数逻辑,不得不去实现一个接口,jdk8带来的Lambda表达式能够将函数做为参数直接传入方法内(至少看起来是这样)。数组

提及Lambda在jdk8中强大,就不得不提jdk8带来的Stream API,Stream API分为中间操做和终端操做,函数

经常使用的中间操做包括:filter(过滤), map(映射,好比将某个对象映射为其惟一ID), distinct(使用equals去重), sorted(使用Comparator排序), skip(跳过n个), limit(限制最大个数n)spa

经常使用的终端操做包括:code

  1. forEach(遍历), toArray(返回数组), collect(将处理好的流收集到一个容器中,好比List), reduce(聚合), count, min(使用Comparator取最小), max
  2. findFirst, findAny, anyMatch, allMatch, noneMatch

 

函数接口

1 @FunctionalInterface
2 public interface Comparator<T> {
3   int compare(T o1, T o2);
4   boolean equals(Object obj);
5   //other methods ...
6 }

Comparator就是一个函数接口,所谓函数是指只有一个有效抽象方法的接口,这里的有效抽象方法不包括Object中的方法,任何一个只有一个有效抽象方法的接口均可以做为函数接口使用,即使没有被@FunctionalInterface注解。对象

函数接口是如何工做的呢?blog

1 List<String> list = new ArrayList<>();
2 //add elements ...
3 list.stream().filter(p -> p.length() > 3);

filter的入参是一个Predicate函数接口,该函数接口有一个抽象方法test,能够将filter(Predicate predicate)当作是以下处理排序

 1 Stream<T> filter(Predicate<? super T> predicate){
 2     for (each string in stream){
 3          if(predicate.test(string)){
 4              keep the string
 5          }else{
 6              drop the string
 7          }
 8  
 9     return stream;
10 }
相关文章
相关标签/搜索