【北京联盟】

技术编程5万字:Stream和Lambda表达式最佳实践2

『北京联盟摘要_技术编程5万字:Stream和Lambda表达式最佳实践2 |』7.2处理checkedExceptioncheckedException是必须要处理的异常,我们还是看个例子:staticvoidthrowIOException(Integerinteger)throwsIOException{}复制代码Listintegers=Arrays.asList(1,2,3,4,5);integers.forEach(i-throwIOException(i));复制代码上面...



7.2 处理checked Exception
checked Exception是必须要处理的异常 , 我们还是看个例子:static void throwIOException(Integer integer) throws IOException {}复制代码List
integers = Arrays.asList(1, 2, 3, 4, 5);integers.forEach(i -> throwIOException(i));复制代码
上面我们定义了一个方法抛出IOException , 这是一个checked Exception , 需要被处理 , 所以在下面的forEach中 , 程序会编译失败 , 因为没有处理相应的异常 。
最简单的办法就是try , catch住 , 如下所示:integers.forEach(i -> {try {throwIOException(i);} catch (IOException e) {throw new RuntimeException(e);}});复制代码
当然 , 这样的做法的坏处我们在上面已经讲过了 , 同样的 , 我们可以定义一个新的wrapper方法:staticConsumer consumerWrapper(ThrowingConsumer
throwingConsumer) {return i -> {try {throwingConsumer.accept(i);} catch (Exception ex) {throw new RuntimeException(ex);}};}复制代码
我们这样调用:integers.forEach(consumerWrapper(i -> throwIOException(i)));复制代码
我们也可以封装一下异常:static
Consumer consumerWrapperWithExceptionClass(ThrowingConsumer
throwingConsumer, Class
{try {throwingConsumer.accept(i);} catch (Exception ex) {try {E exCast = exceptionClass.cast(ex);System.err.println("Exception occured : " + exCast.getMessage());} catch (ClassCastException ccEx) {throw new RuntimeException(ex);}}};}复制代码
然后这样调用:integers.forEach(consumerWrapperWithExceptionClass(i -> throwIOException(i), IOException.class));复制代码8. stream中throw Exception
之前的文章我们讲到 , 在stream中处理异常 , 需要将checked exception转换为unchecked exception来处理 。
我们是这样做的:staticConsumer consumerWrapper(ThrowingConsumer
throwingConsumer) {return i -> {try {throwingConsumer.accept(i);} catch (Exception ex) {throw new RuntimeException(ex);}};}复制代码
将异常捕获 , 然后封装成为RuntimeException 。
封装成RuntimeException感觉总是有那么一点点问题 , 那么有没有什么更好的办法?8.1 throw小诀窍
java的类型推断大家应该都知道 , 如果是 这样的形式 , 那么T将会被认为是RuntimeException!
我们看下例子:public class RethrowException {public static
R throwException(Exception t) throws T {throw (T) t; // just throw it, convert checked exception to unchecked exception}}复制代码
上面的类中 , 我们定义了一个throwException方法 , 接收一个Exception参数 , 将其转换为T , 这里的T就是unchecked exception 。
接下来看下具体的使用:@Slf4jpublic class RethrowUsage {public static void main(String[] args) {try {throwIOException();} catch (IOException e) {log.error(e.getMessage(),e);RethrowException.throwException(e);}}static void throwIOException() throws IOException{throw new IOException("io exception");}}复制代码
上面的例子中 , 我们将一个IOException转换成了一个unchecked exception 。 9. stream中Collectors的用法
在java stream中 , 我们通常需要将处理后的stream转换成集合类 , 这个时候就需要用到stream.collect方法 。 collect方法需要传入一个Collector类型 , 要实现Collector还是很麻烦的 , 需要实现好几个接口 。
于是java提供了更简单的Collectors工具类来方便我们构建Collector 。


上一篇:新机发布OPPO闪充家族亮相ChinaJoy现场,多款产品花样百出,放眼全收

下一篇:知识就是力量杂志藏文科普 | 利用光学镊子,或许可以在未来开启一场激光星际探险

资讯

欧洲足球观察|12日转会速览:尤文7000万欧报价伊斯科;帕雷霍“0元”转会黄潜

阅读(23)

根据意大利媒体《罗马体育报》的消息,皮尔洛在成为尤文主帅之后确定了多位引援对象,而在中场方面,皇家马德里的伊斯科则成为了首要目标。根据报道,尤文方面愿意为伊斯科开出总价7000万欧元的报价,不过希望将球员加入交易。评:伊斯科有着非常出色的盘带和...

资讯

上观新闻|免费打卡魔都网红卡丁车!赛卡联盟卡丁车体验赛开赛啦

阅读(32)

你怎么能缺席赛卡联盟卡丁车体验赛报名开启今天小体继续送出福利有20个免费名额,等你来抢!●●●比赛日期2020年8月18日(周二)9:30-12:30(9:00起签到)比赛地点赛卡联盟松江体验旗舰店上海市松江区茸平路28号比赛信息参赛人数:112人参赛车型:200cc比赛...

亲子

走心育儿堂▲宁愿给姥姥带?宝妈给出的原因很现实,“奶奶带娃”越来越遭嫌弃

阅读(11)

梁密斯是一个方才生完孩子的宝妈,因为孩子须要人照顾,丈夫与家人都劝梁密斯放弃如今的工作,比及孩子上了幼儿园再工作。但推敲到孩子往后用钱将会越来越多,并且几年后再找工作很可能会又要重头开端,于是梁密斯照样计算回到工作岗亭上。丈夫便提议让孩子的...

联盟推荐

【一金】这种鱼曾被用来喂鸭子,如今“一金难求”,最贵时一斤能值上百元

阅读(26)

这种鱼的鱼头比拟于鱼身,显得相对较大年夜,是以看起来给人一种很呆萌的感到。这种鱼属于小型鱼种,并不会长得很大年夜,然则它们的味道倒是十分的鲜美。然则在小编小的时刻,不管是在河道照样溪水中,都经常可以见到这种鱼的身影。并且那时刻在农村长大年夜...

热点滚动

「区议会」黄之锋们,"反中乱港"必有代价!

阅读(32)

“港独”组织“香港众志”秘书长黄之锋 , 29日收到香港特区第六届区议会一般选举所在选区选举主任通知 , 其不获确认区议会参选资格 。 对这一于法有据、于理应当的决定 , 黄之锋肆意诋毁、恶意曲解 , 试图将法律问题“政治化” , 为自己捞取政治资本的...

生活

蔬菜 孩子讨厌吃蔬菜?教你6招,让儿童在游戏中,改善不良的饮食习惯,快收藏

阅读(21)

一、蔬菜能赞助你变得强健要多吃胡萝卜、青豆和黄瓜!天天都要吃蔬菜,要吃遍所有本身想吃的蔬菜!蔬菜有时也被称为素菜。你爱好吃蔬菜吗?有些孩子异常爱好,有些则只爱好一两种。如今你可以开端爱好更多的蔬菜了,你所要做的就是保持吃它们!或许你会爱好一...

生活知识

在北京工作的小伙伴,你们选择啥时候逃离

阅读(27)

———————瓜分线—————————客岁归去待了半年,本年又回来了。并且决定不再分开。因为你已经习惯了北京,归去一切都是陌生,只有这里能让你更自由。欲望想逃离的人大年夜我身上汲取教训,毕竟耽搁了半年多成长的时光。...

资讯

守护全民眼健康,享受“看得见”的幸福

阅读(43)

尤其是,我国作为世界上盲和视觉损伤人数最多的国家之一,同时处于人口老龄化快速发展的关键阶段,中老年眼健康问题显得尤为突出。据资料显示,截至2018年底,我国60岁及以上老年人口高达2.5亿,其中,60岁以上的老年人群高血压患病率达58.3%,糖尿病患病率达19.4%,在...

联盟推荐

吊带公主裙 100W SDR收发信机,内置英特尔i7处理器,「新品情报站」Andromeda

阅读(35)

以下是维诽谤科定义SDR的方法:“软件定义无线电(SDR)是一种无线电通信体系,个中传统上以硬件实现的组件(例如,混频器,滤波器,放大年夜器,调制器/解调器,检测器等)经由过程小我计算机上的软件或嵌入式体系实现。”?固然你爷爷这一辈的收音机都是以滤...

生活知识

广东物流产业的发展现状及前景具体是咋样的

阅读(10)

谢谢邀请,对于广东地域来说,是国内接触物流行业比较早的地区,物流业发达。全国物流看长三角和珠三角。前景来说珠三角物流行业正在面临着转型阶段,第三方物流借助前几年的发展已走入主流,个人小规模企业正在逐步被取代。物流行业不建议女孩子选择,因为物...

联盟推荐

知识就是力量杂志藏文科普 | 利用光学镊子,或许可以在未来开启一场激光星际探险

阅读(46)

本文插图 本文插图 本文插图 本文插图 加州理工学院应用物理与材料科学教授哈里·阿特沃特(Harry Atwater)领导实验室的研究人员通过在物体表面创建特定的纳米级图案 , 设计了一种仅使用光线去悬浮和推动物体的方法 。 虽然这项研究目前仍停留在理论层面...

资讯

疫情防控期间能否缓缴社保费?乌鲁木齐市人社局回应

阅读(45)

一是以个人身份参加企业职工基本养老保险的个体工商户和灵活就业人员,缴纳2020年基本养老保险的缴费基数下限,可继续执行2019年个人缴费基数下限标准。二是缴纳2020年基本养老保险费确有困难的个体灵活就业人员,可自愿暂缓缴费,到2021年再继续缴费,缴费年...

资讯

央视|热评丨上半年GDP十强排位出炉,变与不变有玄机

阅读(21)

△重庆夜景同样是接受“大考”,重庆和南京何以能够成功“突围”,表现这么好?这也不难理解。重庆是一个内陆城市,在今年上半年,疫情对外贸造成较大冲击的情况下,它的优势就凸显了出来;而南京近年来则是不遗余力打造“创新名城&...

历史

科技论|曹操作为宦官的后人为什么会参与铲除宦官的斗争呢?

阅读(47)

曹嵩做为曹腾的养子,也是受到曹腾的庇荫,历任司隶校尉、大年夜司农等中心高等职务。汉灵帝中平四年,曹嵩以巨款买的三公之首的太尉一职,曹腾亲近士人,曹嵩跻身高管行列,都为曹操在朝堂中打下了很好的基本。那么曹操又是若何介入以袁绍为主谋的诛除寺人的...