您的位置 首页 java

java8的函数式编程

在平时开发工作中使用java8的一些总结,感受到它的方便和快捷。

java8的函数式编程

————————————————————————–

前端监控:www.webfunny.cn ;只需要简单几步,就可以搭建一套属于自己的前端监控系统,快来试试吧。(github:webfunny_monitor)

————————————————————————–

1、Lambda表达式

行为化参数: 做事的行为,即方法体可以当做参数传入,

函数式接口: 带有@FunctionalInterface注解的都是,java8之前常见的有Comparator<T>,Runnable,Callable<T>,之后新增的有Predicate<T>,Consumer<T>,Function<T,R>,Supplier<T>,UnaryOperator<T>,BinaryOperator<T>,BiPredicate<L,R>,BiConsumer<T,U>,BiFunction<T,U,R>,还有这些对应的基本类型的函数式接口,是为了避免拆箱

类型检查、推断以及限制: Lambda表达式会根据上下文来检查、推断参数的类型以及返回值,Lambda表达式里面的引用的 局部变量 是不能被修改,隐式的final。

方法引用: 类名::方法名

java8的函数式编程

2. 函数式编程

特点:

函数是“第一等公民” 指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值

只用“表达式”,不用语句 “表达式”(expression)是一个单纯的运算过程,总是有返回值;”语句”( statement )是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。

没有“副作用” 指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。

不修改状态 函数式编程只是返回新的值,不修改 系统变量

引用透明 引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或”状态”,只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。

意义:

代码简洁,开发快速 函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。

接近自然语言,易于理解 函数式编程的自由度很高,可以写出很接近自然语言的代码。方法链的形式调用

易于“并发编程” 函数式编程不需要考虑” 死锁 “(deadlock),因为它不修改变量,所以根本不存在”锁” 线程 的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署”并发编程”(concurrency)。

流(Stream)接口 API 概览:

java8的函数式编程

Collectors类API概览:

java8的函数式编程

Optional 类API概览:

java8的函数式编程

3. 默认方法

API的演进,向下兼容的问题,接口可以有方法实现了,default修饰符,

如何解决菱形继承问题:

1) 类中的方法优先级最高类或父类中声明的方法的优先级高于任何声明为默认方法的优先级

2) 如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择具体实现的默认方法的接口,即如何B继承了A,那么B就比A更加具体

3) 如果还是无法判断,继承了多个接口的类必须通过显示覆盖和调用期望的方法,显示地选择使用哪一个默认方法的实现。Java8引入了新语法:C.super.m()

4) 从根本上解决冲突还是避免定义相同的方法

4. 新的日期API

java8的函数式编程

输出结果:

文章来源:智云一二三科技

文章标题:java8的函数式编程

文章地址:https://www.zhihuclub.com/175273.shtml

关于作者: 智云科技

热门文章

网站地图