Java8-概述

概述 java怎么还在变 java中的函数 流 默认方法 来自函数式编程的其他好思想 小结
欢迎访问本人博客:http://wangnan.tech

目录

  • 1.概述
  • 2.java怎么还在变
  • 3.java中的函数
  • 4.流
  • 5.默认方法
  • 6.来自函数式编程的其他好思想
  • 7.小结

1. 概述

为什么你应该关系java8?

  • 因为java8所做的改变,在许多方面比java历史上任何一次改变都深远

再也不哟写下面这种啰嗦的程序了(按苹果重量排序)

Collections.sort(inventory,new Comparator<Apple>)(){
   public int compare(Apple a1,Apple a2){
       return a1.getWeight().compareTo(a2.getWeight())
   } 
}};

java8中:

inventory.sort(Comparing(Apple::getWeight()))

java8对cpu核的利用率提高.

  • StreamAPI
    支持许多处理数据的并行操作,避免用synchronized编写代码

  • 把代码传递给方法的简洁方式(方法引用,Lambda),行为参数化

  • 接口中的默认方法

2.java怎么还在变

java在编程语言生态生态系统中的位置

编程语言生态系统的气候正在变化,程序员越来越多的要处理所谓的大数据,并希望利用多核计算机或计算机集群有效的处理,这意味着需要使用并行处理

新的语言不断出现,并因为迅速适应了气候变化,越来越受欢迎,也促使java中开发出并行和编写更简洁通用代码的功能

流处理

流处理,流是一系列数据项,一次只生成一项,程序可以从输入流中一个一个读取数据项,然后以同样的方式将数据项写入输出流,一个程序的输出流很可能是另一个程序的输入流

基于这一思想,java8在java.util.stream中添加了Stream API,Stream<T>就是一系列T类型的项目,你现在可以把它看成一种比较花哨的迭代器,Stream API的很多方法可以链接起来形成一个复杂的流水线

Java8可以透明地把输入的不相关的部分拿到几个cpu内核上去分别执行你的stream操作流水线--这是几乎免费的并行,不用去费劲的搞Thread了

用行为参数化把代码传递给方法

java8增加了把方法作为参数传递给另一个方法的能力,我们把这一概念称为为行为参数化

并行和共享的可变数据

使用流处理,你需要放弃什么,你的行为必须能够同时对不同的输入安全地执行,一般情况下这就意味着,你写代码时不能访问共享的可变数据,这些函数有时被称为“纯函数”或“无副作用函数”或“无状态函数”

java需要演变

语言需要不断改进以跟进硬件的更新或满足程序员的期待

3.java中的函数

编程语言中的函数一词通常指方法,尤其是静态方法,这是在数学函数,也就是没有副作用的函数之外的新含义,幸运的是,你将会看到,在java8谈到函数时,这两种用法几乎是一致的

java8中新增了函数--值的一种新形式

编程语言的整个目的就在于操作值,要是按照历史上编程语言的传统,这些值因此被称为一等值,编程语言中的其他结构比如方法等,在程序执行期间不能传递,而是二等公民,人名发现在运行时传递方法能将方法变成一等公民,这在编程中非常有用,因此java8设计者把这个功能加入到java中

方法不再是二等值了,与用对象引用传递对象类似,在java8里写在诸如

File::isHidden

的时候,就创建了一个方法引用,你同样可以传递它

lambda--匿名函数
你可以写 (int x)->x+1表示,调用是给定参数x。就返回x+1值的函数

我们说使用这些概念的程序为函数式编程风格,这句话的意思是“编写把函数作为一等值来传递的程序”

4.流

几乎每个java应用都会制造和处理集合,但集合用起来并不总是这么理想,比如你㤇从一个列表中筛选金额较高的交易,然后按照货币分组,你需要写一大堆套路化的代码来实现这个数据处理命令,如下

一眼很难看出来代码时做什么的,然后使用stream API 你现在可以这样解决这个问题

看上去有点神奇,和Collection API相比 Stream API处理数据的方式很不同 ,用集合的话,你到自己去做迭代的过程,你得用for-each循环去一个个的去迭代元素,然后处理元素,我们把这种数据迭代方法称为外部迭代,有了Stream API ,你根本不用操心循环的事情,数据处理完全是在库内部进行的,我们把这种思想叫做内部迭代

使用集合另一个头疼的地方是,数据量特别大,要怎么处理这个巨大的列表呢,理想情况下,你可能想让多核cpu共同分担处理工作,以缩短处理时间,理论上来说,钥匙你有8个核,那并行起来,处理数据的速度应该是单核的八倍

5. 默认方法

接口如今可以包含实现类没有提供实现的方法签名了

使用新的关键字default来表示这一点

一个类可以实现多个接口,如果好几个接口里都有多个默认实现,是否意味着java中有了某种形式的多重继承? 是的,在某种程度上是这样的

来自函数式编程的其他好思想

java从函数式编程中引入了两个核心思想:将方法和lambda作为一等值和在没有可变共享状态时,函数或方法可以有效、安全地并行执行

常用的函数式语言,如SML、OCaml、Haskell,还提供了进一步的结构来帮助程序员,其中之一就是通过更多的描述性数据类型来避免null

在java8里面有一个Optional<T>类,如果你能一致地使用它的话,就可以帮助你避免出现NullPointer异常

第二个想法是模式匹配,你可以把模式匹配看做switch的扩展,可以同时将一个数据类型分解成元素

6.小结

  • 语言面临“要么改变,要么衰亡”的压力。
  • java8新增了令人激动的新概念和功能,方便我们编写有效又简介的程序
  • 函数式一等值
  • stream改变使得collection的许多方面得以推广,代码更易读,并允许并行流处理
  • 你可以在接口中使用默认方法
  • 其他来自函数式编程的有趣思想,包括处理null和使用模式匹配

(注:内容整理自《Java8实战》)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 1,208评论 1 2
  • Streams 原文链接: Streams 原文作者: shekhargulati 译者: leege100 状态...
    忽来阅读 5,511评论 3 32
  • 5月25日,下班回家的路上,看到好友圈里有个朋友分享了自己的文章,出于好奇便点进去看看。就这样,我知道了“简书AP...
    金山的孙女阅读 481评论 0 1
  • 板书是教师在教学中重要的教学手段,美的板书不仅是一种教学作品、视觉享受,是教学内容的浓缩,而且它对学生的影响是深刻...
    莒县第三实验小学朱晓艳阅读 271评论 1 0