前言:
当前姐妹们对“lambda的表达式”大体比较着重,同学们都需要学习一些“lambda的表达式”的相关知识。那么小编同时在网上收集了一些有关“lambda的表达式””的相关文章,希望小伙伴们能喜欢,咱们快快来学习一下吧!小编整理Lambda已经有一段时间了,今天来个Lambda的小总结:
1. 什么是λ表达式
λ表达式本质上是一个匿名方法
public int add(int x, int y) { return x + y; }
转成λ表达式后是这个样子: (int x, int y) -> x + y;
参数类型也可以省略,Java编译器会根据上下文推断出来:
(x, y) -> x + y; //返回两数之和 或者
(x, y) -> { return x + y; } //显式指明返回值
可见λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。
2.重要的函数接口 //@FunctionalInterface
/** * 关于函数接口 *1.如果一个接口只有一个抽象方法,那么该接口就是一个函数接口 * 2.如果我们在某个接口上声明FunctionalInterface注解 那么编译器就会按照函数的定义要求该接口 * 3.如果某个接口只有一个抽象方法 但没有声明functionalInterface注解 那么编译器依旧会将该接口看作函数接口 */
* stream 串行流 单线程 * parallelStream 并行流 * * map 方法相当于映射 * Function<T,R> t 输入的类型 R 输出的类型
* LAmbda 是一种匿名函数没有声明的方法,没有访问修饰符 返回值声明和名字
* 传递行为,而不仅仅是值
* 提升抽象层次
* API重用
* 一个Lambda表达式可以有多个或者0个参数
* 所有的参数在()内 空括号元素为空
一个函数接收一个函数作为参数 或者返回一个函数的返回值 那么该函数就叫做高阶函数
//Function俩个function嵌套 /* * default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { * Objects.requireNonNull(before); * return (V v) -> apply(before.apply(v)); * } * compose先应用参数的apply方法 先执行func2的apply 2*2 作为参数执行func1的apply 2*2*3 */ public int compute(int a, Function<Integer,Integer> func1, Function<Integer,Integer> func2){ return func1.compose(func2).apply(a); //12 } /** * default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { * Objects.requireNonNull(after); * return (T t) -> after.apply(apply(t)); * } * andThen 先应用当前对象apply方法 先执行func1的apply 2*3 作为参数执行func1的apply (2*3)*(2*3) */ public int compute2(int a, Function<Integer,Integer> func1, Function<Integer,Integer> func2){ return func1.andThen(func2).apply(a); //36 } //BiFunction /** * BiFunction<T,U,R>接口 函数会接收2个参数得到一个结果 Function接口的一种特化形式 * R apply(T t,U u); */ public int compute(int a,int b,BiFunction<Integer,Integer,Integer> func){ return func.apply(a,b); } /** * default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) { * Objects.requireNonNull(after); * return (T t, U u) -> after.apply(apply(t, u)); * } * System.out.println(test06.compute(1,2,(value1,value2)->value1+value2,value->value*2)); * 1+2=3 把3当成function的输入计算3*2 = 6 */public int compute(int a,int b,BiFunction<Integer,Integer,Integer> func1,Function<Integer,Integer> func2){ return func1.andThen(func2).apply(a,b);}
//Predicatepublic static void main(String[] args) { Predicate<String> predicate = p->p.length()>5; predicate.test("hello"); //满足条件返回true or false System.out.println(predicate.test("hello"));}
//Predicatepublic static void main(String[] args) { Predicate<String> predicate = p->p.length()>5; predicate.test("hello"); //满足条件返回true or false System.out.println(predicate.test("hello"));}
欢迎大家去查看之前关于Lambda的详细讲解!
欢迎大家留言 互相切磋学习!
标签: #lambda的表达式