lambda表达式

什么是lambda 表达式?

lambda 表达式主要是将之前面向对象的传递数据思想改变为传递行为.

lambda 表达式的好处有哪些?

  • 匿名
    这里所谓的匿名不是向Java8之前的匿名,而是表达的意思是写得少而想的多
  • 函数
    我们说它是函数是因为lambda函数不像方法那样属于某个特定的类,但和方法一样,lambda有参数列表,函数主体,返回类型,还有可能抛出异常列表
  • 传递
    lambda表达式可以作为参数传递给方法
  • 简洁
    无需向匿名类那样写很多模板方法

lambda 表达式结构

(args) -> {code segment}

函数式接口

public interface Predicate {
    boolean test(T t);
}

一言以蔽之,函数式接口就是只定义一个抽象接口的方法.类似的有 runnable,callable,comparator 等等
函数式接口可以干什么呢?
lambda表达式允许你以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例.

@FunctionalInterface
当某个接口加上FunctionalInterface标识,表示这个接口会设计成函数式接口

@FunctionalInterface
public interface Function {
    R apply(T t);
}
@FunctionalInterface
public interface Predicate {
    /**
     * @param t
     * @return
     */
    boolean test(T t);
}
public static void main(String[] args) {
        List filter = filter(Arrays.asList(1, 2, 3, 4, 5), i -> i > 3);
        filter.forEach(integer -> System.out.println(integer));
        List map = map(Arrays.asList(1, 2, 3, 4, 5), i -> i * 2);
        map.forEach(i -> System.out.println(i));
    }

    /**
     * @param list
     * @param predicate
     * @param 
     * @return
     */
    public static  List filter(List list, Predicate predicate) {
        List result = new ArrayList<>();
        for (T t : list) {
            if (predicate.test(t)) {
                result.add(t);
            }
        }
        return result;
    }

    /**
     *
     * @param list
     * @param function
     * @param 
     * @param 
     * @return
     */
    public static  List map(List list, Function function) {
        List result = new ArrayList<>();
        for (T t : list) {
            result.add(function.apply(t));
        }
        return result;
    }

方法引用

在我看来方法引用并没有什么用处,只是让你的代码更简洁,但是阅读起来我觉得不是很好理解,可能因人而异,所以我不太喜欢使用方法引用.

你可能感兴趣的:(lambda表达式)