lambda

  • lambda 提供一种简化代码的方式;
  • lambda 可以视作一个只有函数参数和方法体的方法, 没有修饰符、函数名和返回值声明;
  • 实现内部类的效果(也内部类类似但有不同点)
  • 能使用 lambda 的接口, 是函数式接口(接口内只有一个抽象方法)

参数

  • 参数可以声明类型, 也可以不声明而由上下文自动推导出类型
  • 参数放在()里, 多个参数使用 "," 分开
  • 一个参数且类型是自动推导出来的, 那么 () 可以省略;
  • 零个参数可以直接写();

表达式

  • 表达式可以有若干条, 只有一条时, "{}" 可以省略;
  • 只有一行的话, return 可以省略

一些概念

函数式接口

  • 只拥有一个方法的接口称为 函数式接口
  • 编译器可以自动判断一个接口是否是函数式接口
  • @FunctionalInterface 注解来显式指定一个接口是函数式接口

java.util.function,它里面包含了常用的函数式接口,例如:

  • Predicate——接收 T 并返回 boolean
  • Consumer——接收 T,不返回值
  • Function——接收 T,返回 R
  • Supplier——提供 T 对象(例如工厂),不接收值
  • UnaryOperator——接收 T 对象,返回 T
  • BinaryOperator——接收两个 T,返回 T

与 java.util.stream.Stream 配合

Stream 配合使用

// 该例子来源 docs.oracle.com
roster
    .stream()
    .filter(
        p -> p.getGender() == Person.Sex.MALE
            && p.getAge() >= 18
            && p.getAge() <= 25)
    .map(p -> p.getEmailAddress())
    .forEach(email -> System.out.println(email));

results matching ""

    No results matching ""