本篇内容主要讲解“java8中lambda表达式的用法总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java8中lambda表达式的用法总结”吧!
创新互联专注于尉犁企业网站建设,自适应网站建设,商城网站建设。尉犁网站建设公司,为尉犁等地区提供建站服务。全流程按需定制,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
目的:行为参数化
Lambda表达式是简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
Lambda的基本语法是(parameters) -> expression 或 (parameters) -> { statements; }。其中, (parameters) -> expression 的表达式中隐含了return,如 () -> 42; (parameters) -> { statements; } 的花括号内是语句。
举例:
() -> 42 //参数为空,返回一个int(List
函数式接口是只定义一个抽象方法的接口,即使拥有多个默认方法。FunctionalInterface 标注一个函数式接口,会加入编译检查。函数式接口中默认方法的目的是:改变已发布的接口而不破坏已有的实现。
在接受函数式接口为参数的地方,都可以使用lambda表达式。
例子:
public void execute(Runnable r){ r.run(); }execute(() -> {}); //使用lambda,Runnable是参数为空,没有返回值的函数式接口,即() -> void //fetch返回一个函数式接口,() -> Stringpublic Callable
为什么只有在函数式接口的地方使用呢?lambda表达式没有函数名,只有参数列表,函数主体和返回值,如果接口有多个方法,就不能直接匹配到正确的方法上了,所以,只有一个抽象方法的函数式接口可以满足。
java.util.function.Predicate
FunctionalInterfacepublic interface Predicate
使用
Predicate
java.util.function.Consumer
@FunctionalInterfacepublic interface Consumer
java.util.function.Function
@FunctionalInterfacepublic interface Function
在处理数据时,使用特定方法,可以避免装箱操作,如:IntPredicate、LongConsumer、DoubleFunction等。具体见API库。
总结
(T) ->bool java.util.function.Predicate
(T) -> void java.util.function.Consumer
(T) -> R java.util.function.Function
(T,U) -> R java.util.function.BiFunction
() -> T java.util.function.Supplier
只要函数描述符兼容,函数式接口就可以复用。
特殊的void兼容规则:
// Predicate返回了一个boolean Predicate
方法引用是调用单一方法的Lambda的快捷写法,格式ClassName::methodName。看下栗子你就懂了~
一般方法引用
(Apple a) -> a.getWeight() 等价于Apple::getWeight () -> Thread.currentThread().dumpStack() 等价于 Thread.currentThread()::dumpStack(str, i) -> str.substring(i) 等价于 String::substring(String s) -> System.out.println(s) 等价于 System.out::println(list, element) -> list.contains(element) 等价于 List::contains
主要有三类:
指向静态方法的方法引用,如:Integer::parseInt 指向任意类型实例方法的方法引用,如:String::length 指向现有对象的实例方法的方法引用,如:User::getUserId
构造函数引用
无参构造函数
无参构造函数的函数描述符:() -> T,由上面的总结知,可以使用Supplier接口,如下:
Supplier
有一个参数的构造函数
有一个参数的构造函数的函数描述符是(T) -> R,可以使用Function接口,如下:
Function
有三个参数的构造函数
有三个参数的构造函数的函数描述符是(T,U,V) -> R,没有现成的接口,需要自定义,如下:
@Data@AllArgsConstructorpublic class User { private String name; private Long userId; private Integer age;}@FunctionalInterfacepublic interface TriFunction
使用注意事项
Lambda表达式可以引用静态变量、成员变量和最终的(final) 或事实上最终的局部变量。
到此,相信大家对“java8中lambda表达式的用法总结”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!