Java8 实战系列-02-lambda 表达式简介

lambda

是什么?

lambda 可以简洁地表示可传递的匿名函数的一种方式。

  • 匿名

不需要确切指定一个名称。

  • 函数

它不想方法那样隶属于某个特定的类。

但是和普通方法一样拥有参数列表,函数主题,返回类型,还有可能抛出异常列表。

  • 传递

可以作为参数传递给方法或者存储在变量中。

  • 简洁

无需像匿名类那样写很多模板代码。

例子

  • 先前
Comparator<Apple> byWeight = new Comparator<Apple>(){
   public int compare(Apple a1, Apple a2) {
       return a1.getWeight().compareTo(a2.getWeight());
   } 
};
  • 现在
Comparator<Apple> byWeight = 
    (Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight());

基础语法

(parameters)->expression

或者

(parameters)->{statements;}

使用案例

使用案例lambda 示例
布尔表达式(List<String> list)->list.empty()
创建对象()->new Apple(10)
消费一个对象(Apple a)->{ System.out.println(a.getWeight())}
从一个集合中选择(String s) -> s.length()
组合两个数(int a, int b)->a*b
比较2个对象(Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight())

使用场景

  • 在哪里使用
    当我们对 lambda 有个基础的了解之后,那么在什么地方可以使用呢?

函数式接口

函数接口就是只定义一个抽象方法的接口。

比如:

  • Predicate.java
/**
 * Represents a predicate (boolean-valued function) of one argument.
 * @since 1.8
 */
@FunctionalInterface
public interface Predicate<T> {

    /**
     * Evaluates this predicate on the given argument.
     */
    boolean test(T t);
}

@FunctionalInterface
这个注解用于表示接口会设计成一个函数式接口。
但是却不是必须的,类似于 @Override,使用它是一种优秀的习惯。

  • 简单使用
    比如说 Runnable,此时匿名内部类略显繁琐。
/**
 * 函数式接口案例
 * @author bbhou
 * @version 1.0.0
 */
public class FunctionalInterfaceDemo {

    public static void main(String[] args) {
        progress(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hell World");
            }
        }); //0. 匿名内部类

        Runnable runnable = ()-> System.out.println("Hello world"); //1. lambda
        progress(runnable);

        progress(()-> System.out.println("Hello world"));   //2. 直接使用 lambda
    }

    /**
     * 执行 Runnable
     * @param runnable 可运行
     */
    private static void progress(Runnable runnable) {
        runnable.run();
    }
}

函数描述符

函数式接口的抽象方法的签名基本上就是 lambda 表达式的签名。
我们将这种抽象方法叫作函数描述符

比如 Runnable接口,可以看做一个什么也不接受,什么也不返回(void)的函数的签名。

目录导航

目录导航

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值