java8中λ表达式的用法总结

介绍

本篇内容主要讲解“java8中λ表达式的用法总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java8中λ表达式的用法总结”吧!

java8之λ表达式

目的:行为参数化

λ表达式是简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表,函数主体,返回类型,可能还有一个可以抛出的异常列表。

λ的基本语法是(参数)→表达式或(参数)→{语句;}。其中(参数)→表达式的表达式中隐含了回报,如()→42;(参数)→{语句;}的花括号内是语句。

举例:

()→42,//参数为空,返回一个int (List列表)→list.isEmpty()//参数为列表,返回一个布尔(int x, int y)→x * y//参数为两个int,返回一个int (String s)→System.out.println(年代);//参数为一个字符串,不返回结果(String s)→{System.out.println(年代);}//参数为一个字符串,打印字符串

哪些地方使用哪些λ

函数式接口是只定义一个抽象方法的接口,即使拥有多个默认方法.FunctionalInterface标注一个函数式接口,会加入编译检查。函数式接口中默认方法的目的是:改变已发布的接口而不破坏已有的实现。

在接受函数式接口为参数的地方,都可以使用λ表达式。

例子:

公共空间执行(可运行r) {, r.run ();}执行(()→{});//使用λ,运行的是参数为空,没有返回值的函数式接口,即()→空白//获取返回一个函数式接口,()→Stringpublic Callablefetch () {,返回()→“棘手的例子;-)“}

为什么只有在函数式接口的地方使用呢?λ表达式没有函数名,只有参数列表,函数主体和返回值,如果接口有多个方法,就不能直接匹配到正确的方法上了,所以,只有一个抽象方法的函数式接口可以满足。

谓词

java.util.function.Predicate是一个含有多个默认方法的函数式接口,抽象方法为:T (T)→bool。看下代码,你就懂了~

FunctionalInterfacepublic接口Predicate{,//接口方法,入参为泛型T,返回bool。即:T (T)→bool,布尔测试(T T);,//默认方法,操作,默认Predicate和(Predicate<?超级T>其他){,,Objects.requireNonNull(其他);,,返回(t)→测试(t),,other.test (t);,}//默认方法,取反操作,默认Predicate否定(){,,返回(t)→!测试(t);,}//默认方法,或操作,默认Predicate或(Predicate<?超级T>其他){,,Objects.requireNonNull(其他);,,返回(t)→测试(t) | | other.test (t);,}//默认方法,判断是否相等,静态& lt; T>PredicateisEqual(对象targetRef) {,,返回(null==targetRef),,,,吗?对象:isNull,,,,:对象→targetRef.equals(对象);,}

使用

PredicatenonEmptyStringPredicate=(String s)→! s.isEmpty ();

java.util.function.Consumer<消费者;T>是一个只含有一个默认方法的函数式接口,抽象方法为:T (T)→空白。看下代码,你就懂了~

@FunctionalInterfacepublic接口Consumer{,//接口方法,入参为泛型T,返回空白。即:T (T)→空虚,空虚接受T (T);,//默认方法,可以执行级联操作,默认Consumer然后(Consumer<?超级T>{后),,Objects.requireNonNull(后);,,返回(T T)→{接受(t);after.accept (t);};,}

java.util.function.Function<函数;T, R>是一个含有多个默认方法的函数式接口,抽象方法为:T (T)→r .看下代码,你就懂了~

@FunctionalInterfacepublic接口Function{,//接口方法,入参为泛型T,返回泛型r .即:T (T)→应用R, R T (T);,//默认方法,实现级联操作.before方法输入V,输出T,本函数输入T,输出r,默认& lt; V>Function组成(Function<?超级V, ?T>延伸;){,,Objects.requireNonNull(之前);,,返回(V V)→应用(before.apply (v));,}//默认方法,级联操作,默认& lt; V>Function然后(Function<?超级R, ?V>延伸;{后),,Objects.requireNonNull(后);,,返回(T T)→after.apply(应用(t));,}//默认方法,输入啥,输出啥,静态& lt; T>Function(){身份,,返回t→t;,}

特定方法避免装箱操作

在处理数据时,使用特定方法,可以避免装箱操作,如:IntPredicate, LongConsumer, DoubleFunction等。具体见API库。

总结

(T)→bool,,,<代码> java.util.function.Predicate ,,,,,,,(T)→空虚,,,<代码> java.util.function.Consumer ,,,,,,,(T)→R,,,<代码> java.util.function.Function ,,,,,,,(T, U)→R,,,<代码> java.util.function.BiFunction ,,,,,,,()→T,,,<代码> java.util.function.Supplier

只要函数描述符兼容,函数式接口就可以复用。

特殊的空白兼容规则:

//谓词返回了一个布尔Predicate

java8中λ表达式的用法总结