lambda表达式

什么是lambda 表达式?

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

lambda 表达式的好处有哪些?

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

lambda 表达式结构

(args) -> {code segment}

函数式接口

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

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

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

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

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

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

方法引用

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容