Lambda表达式

函数式接口

// 定义一个布尔表达式
@FunctionalInterface
public interface Predicate<T> {
  boolean test(T t)
}

// 接受两个对象,返回boolean
BiPredicate<L,R> {
  (L, R) -> boolean
}

// 访问T类型的对象,执行某些操作,但不返回。
@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);
}

// 访问T类型对象和R类型对象
BiConsumer<T, U> {
  (T, U) -> void
}

// 接受输入T类型对象,映射输出R类型对象
@FunctionalInterface
public interface Function<T, R> {
  R apply(T t)
}

// T和U两个类型,映射成一个类型R

BiFunction<T, U, R> {
  (T, U) -> R
}

// 类似工厂方法,不接受外部参数,制造一个T对象
Supplier<T> {
  () -> T
}

// 一元操作符,进来T,出去也是T
UnaryOperator<T> {
  T -> T
}

// 二元操作符
BinaryOperator<T> {
  (T, T) -> T
}

复合Lambda表达式

比较器复合

inventory.sort(comparing(Apple::getWeight).reversed()
  .thenComparing(Apple::getCountry)) // 两个苹果一样重,按国家排序

谓词复合

Predicate<Apple> redAndHeavyAppleOrGreen = 
  redApple.and(a -> a.getWeight > 150)
    .or( a -> "green".equals(a.getColor()));

函数复合

Function<String, String> addHeader = Letter::addHeader;
Function<String, String> transformationPipeline = 
  addHeader.andThen(Letter::checkSpelling)
    .andThen(Letter::addFooter);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容