java8 lambda

java8 lambda

函数式接口

  • 谓词 Predicate<T> boolean test(T t); T -> boolean
  • 消费者 Consumer<T> void accept(T t); T -> void
  • 映射 Function<T, R> R apply(T t); T -> R
  • 供应者 Supplier<T> T get(); () -> T
  • 一元操作 UnaryOperator<T> extends Function<T, T> T apply(T t); T -> T
  • 二元操作 BinaryOperator<T> extends BiFunction<T,T,T> T apply(T t1, T t2); (T, T) -> T
  • BiPredicate<T,U> boolean test(T t, U u); (T,U) -> boolean
  • BiConsumer<T,U> void accept(T t, U u); (T, U) -> void
  • BiFunction<T,U,R> R apply(T t, U u); (T,U) -> R

方法引用

  • 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。
  • 指向任意类型实例方法的方法引用(例如String的length方法,写作String::length)。
  • 指向现有对象的实例方法的方法引用(假设你有一个局部变量expensiveTransaction用于存放Transaction类型的对象,它支持实例方法getValue,那么你就可以写expensiveTransaction::getValue)。
lambda 方法引用
(args) -> ClassName.staticMethod(args) ClassName::staticMethod
(arg0, rest) -> arg0.instanceMethod(rest) ClassName :: instanceMethod arg0是ClassName类型
(args) -> expr.instanceMethod(args) expr.instanceMethod

exp:

lambda 方法引用
(args) -> ClassName.staticMethod(args) ClassName::staticMethod
(arg0, rest) -> arg0.instanceMethod(rest) ClassName :: instanceMethod arg0是ClassName类型
(args) -> expr.instanceMethod(args) expr.instanceMethod

构造函数引用

对于一个现有构造函数,你可以利用它的名称和关键字new来创建它的一个引用:
ClassName::new。

  • 假设有一个构造函数没有参数。它适合Supplier的签名() -> Apple
    Supplier<Apple> c1 = Apple::new; ==> Supplier<Apple> c1 = () -> new Apple();
  • 如果你的构造函数的签名是Apple(Integer weight),那么它就适合Function接口的签
    名.Function<Integer, Apple> c2 = Apple::new; ==> Function<Integer, Apple> c2 = (weight) -> new Apple(weight)
  • 如果你有一个具有两个参数的构造函数Apple(String color, Integer weight),那么
    它就适合BiFunction接口的签名,BiFunction<String, Integer, Apple> c3 = Apple::new; ==> BiFunction<String, Integer, Apple> c3 = (color, weight) -> new Apple(color, weight);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • lambda表达式(又被成为“闭包”或“匿名方法”)方法引用和构造方法引用扩展的目标类型和类型推导接口中的默认方法...
    183207efd207阅读 5,328评论 0 5
  • 1. 什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子: public int add(int...
    黎景阳阅读 6,495评论 1 3
  • FunctionalInterface 函数式接口 函数式接口:仅仅包含一个抽象方法的接口 由于默认方法不是抽象方...
    专职跑龙套阅读 1,445评论 0 0
  • 为了支持函数式编程,Java 8引入了Lambda表达式.在Java 8中采用的是内部类来实现Lambda表达式....
    光剑书架上的书阅读 4,524评论 2 10
  • 我在家里排行老二,实际上和大一点哥哥姐姐们断代有一点远。他们可以约着去读书,我就和老人留在家里等他们放学。所...
    六块岛岛阅读 4,314评论 1 1

友情链接更多精彩内容