你为什么学不会lambda
这个一篇对学习 Lambda 表达式进行解惑的文章,主要是总结了自己在学习 Lambda 表达式时候的一些理解不了的坑进行总结。长篇大论和详细语法,自行谷歌,这里只说一些理解起来不顺的概念。
重要事情说三遍123首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。
1. 什么是 ()->{ }理论造航母,程序就一行。不提什么是函数式编程,用大白话,其实就是写了一个匿名实现,并且在需要使用这行匿名实现的时候调用了一下,才会直正去执行这个匿名实现方法。Lambda 表达式,本质上是一种延迟加载执行。将预先写好的实现方法进行加载。到实际使用时,再执行。
演示执行过程:1.声明一个 Lambda 表达式接口2.加载一下匿名实现方法3.执行一下
新建一个类,声明一个 Lambda 表达式接口12 ...
Lambda Optional代替if-else
前言函数式的编程可以极大的简化逻辑代码的编写,虽然是一种语法糖,但是好用就是好用。Optional 这个功能可以用来防止null值给程序带来的异常,提供的API也可以用来简化逻辑代码的编码,简化if-else的编写。
写法比较常规代码写法一般写一个业务逻辑时,业务代码需要加很多判断,保证程序的健状性。
12345678910111213public void test() { User user = userService.getUser(); if (user != null) { String userName = user.getUserName(); if (userName != null) { return userName.toUpperCase(); } else { return null; } } else { return null; }}
改进后可以看到,改进后的写法,判空这种操作,直接交给Optiona ...
Lambda Optional使用
简述Optional 针对空指处理而设计的类型。Java 8借鉴了Scala和Haskell,提供了一个新的Optional模板,可以用它来封装可能为空的引用。这是一个可以为null的容器对象。使用 Optional 的好处是可以以一种专门针对null的处理方式,来避免值可能存在 null 导致出现的程序异常。你可以理解为:处理null,就是你的业务。在实际使用过程中,你会发现 Optional 的灵活性有时候会让你想用在任何可能出现null的地方,不过凡事都有套路可循,只要清楚利弊就知道该如何选择。
从两个方面说一下 Optional
常用API
项目使用套路
只讲 API 不讲使用套路的文章都是耍流氓。
API说明先看一下常用API,后面再讲实际使用场景。
构建API: 构建Optional对象:of()、ofNullable()、empty()
获取API: 获取Optional对象包装的值:get()、orElse()、orElseGet()、orElseThrow()
判断API:对Optional对象里包装的值做一些逻辑判断:isPresent()、ifPresent ...
Lambda01-Functional 函数式接口
Functional 为 lambda 方法提供一个接口
函数式接口Functional 的定义其实很简单:任何接口,如果只包含 唯一一个抽象方法,那么它就是一个 Functional Interface ,函数式接口?这注解名字好。为了让编译器帮助我们确保一个接口满足 Functional Interface 的要求(也就是说有且仅有一个抽象方法),Java8提供了@FunctionalInterface注解。
先学习函数式接,才能理解学习 Lambda 表达式。
有什么用白话:用来为函数式编程提供接口。就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。
简单示例写一个最简单的例子做为入门参考,看不懂不要紧,这个只是一个例子。
声明一个无参的接口声明一个无参函数式接口,为 lambda 提供一个接口。在接口上添加@Functional那么这个接口就是一个函数式接口
1234@FunctionalInterfacepublic interfaceMyFunctional { public abstract ...