流操作中的noException

本文介绍了一些简单的编码实践。 没什么好看的。 在StackOverflow上也进行了讨论。

您只是将一个庞大而复杂的循环重构为一个更具可读性的流表达式,而忘记了某些方法调用引发了异常。 包含此代码的方法将引发此异常,该异常在方法头中声明。 您不想在此级别上处理此异常。 它在更高级别的调用堆栈上受到关注。 而且您会在代码中遇到令人讨厌的错误,就像钉子下的碎片一样。

假设您要将字符串转换为IP地址。

private static final String[] allowed = {"127.0.0.1", "::1"};...Arrays.stream(allowed).map(InetAddress::getByName).collect(Collectors.toSet());

问题是getByName(String host)抛出UnknownHostException 。 这不是RuntimeException因此必须对其进行检查,但是map()方法需要一个Function作为参数,而Function不会引发任何异常。 我们需要一个不会抛出异常的getByName版本(或者我们需要使用一种对异常更me脚的语言)。

Arrays.stream(allowed).map(s -> {try {return InetAddress.getByName(s);} catch (UnknownHostException e) {throw new RuntimeException(e);}}).collect(Collectors.toSet());

这比原始循环更丑陋和混乱。 是否可以尝试/捕获放入实用程序类中的所有内容,并调用一些包装实际调用的la脚静态方法? 是的。 静态导入以下方法:

public interface ExceptionalSupplier<T> {T apply() throws Exception;}
...public static <T> T lame(ExceptionalSupplier<T> z) {try {return z.apply();} catch (Exception e) {throw new RuntimeException(e);}}

导入后可以写

Arrays.stream(allowed).map(s -> lame(() -> InetAddress.getByName(s))).collect(Collectors.toSet());

要注意的是,您不能只lame( ... )通话。 您必须将其转换为出色的供应商。 具有与Supplier相同的功能接口,但允许例外。

还是不理想。 (嗯,它是Java,所以您期望什么?)好的。 它是Java,但仍然可以做得更好。 如果不是通过供应商将表达式转换为不引发异常的表达式,我们可以将引发异常的“函数”转换为不引发异常的表达式。 我们需要一个接受异常函数并返回正常函数的方法。 这样,我们可以在代码中保存() ->噪声。 可读性规则。

public interface ExceptionalFunction<T, R> {R apply(T r) throws Exception;}
...public static <T, R> Function<T, R> lame(ExceptionalFunction<T, R> f) {return (T r) -> {try {return f.apply(r);} catch (Exception e) {throw new RuntimeException(e);}};}

使用该实用程序,“最终”表达式将是

Collection<InetAddress> allowedAddresses =Arrays.stream(allowed).map(lame(InetAddress::getByName)).collect(Collectors.toSet());

GIST中的实际实用程序类定义了一个WrapperException扩展了RuntimeException以便您可以在方法中的某个地方捕获异常,例如

public myMethod() throws IOException {
try{... do whatever here we do ...} catch (RuntTimeExceptionWrapper.WrapperException we) {throw (IOException) we.getCause();}

这样,该方法将引发异常,但是如果任何地方还有另一个RuntimeException将引发未捕获。

这只是一个简单,不错的小技巧,可以帮助您跟上Java,它向后兼容,而不是使用现代,简洁的其他语言开始开发,而让您将更多精力放在需要编码的功能上编码技术。

翻译自: https://www.javacodegeeks.com/2017/09/noexception-stream-operation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

optimize table 需要多久_吉林市政工程资质新办需要多久

七。 暖通空调专业&#xff1a;水暖工程&#xff0c;建筑环境与设备&#xff0c;环境工程&#xff0c;暖通空调&#xff0c;供暖和通风与空调&#xff0c;制冷和空调&#xff0c;水暖&#xff0c;供暖和通风&#xff0c;HVAC&#xff0c;公共设备安装。如何申请第三级土木工程资…

Java EE 6 开发环境

软件安装&#xff1a; 选择 Glassfish 支持 Java EE 6 的最新版本 3.1.2.2根据 Glassfish 3.1.2 的 certification matrix&#xff0c;要求 JDK 1.6 update 29&#xff0c;因此&#xff0c;选择 JDK 6 最新版本 JDK 6u45选择 Eclipse Indigo&#xff0c;其之后的版本要求 JDK 7…

mysql连接不断线_某些小时后MySql连接自动掉线

mysql连接不断线MySql配置为删除任何闲置超过8小时的连接。 这意味着什么&#xff1f; 在8个小时的间隔后返回到已部署的应用程序之后&#xff08;如果未更改默认SQL参数&#xff09;&#xff0c;将会遇到异常情况。 如何解决这个问题&#xff1f; 增加wait_time参数-不是一个…

pb65 xp 安装无反应_长春优质AFB型耐腐蚀泵安装

长春优质AFB型耐腐蚀泵安装 k5b5b5s长春优质AFB型耐腐蚀泵安装 并及时更换轴套。而随着科技的不断发展&#xff0c;新式设备的问世&#xff0c;设备一般都开始被筛选。无密封自吸泵无密封自吸泵就是一种新式泵&#xff0c;该泵密封可靠&#xff0c;选用无泄漏密封设备&#xff…

虚函数探秘

C的多态分为动态多态和静态多态&#xff0c;其中静态多态主要靠重载和模板来实现&#xff0c;而动态多态则主要靠继承来实现了。 那么静态和动态&#xff0c;怎么算静&#xff0c;怎么算动呢&#xff1f;静态多指编译期能决定的事情&#xff0c;而动态多指运行时才决定的事情。…

Errai框架简介

Errai是Red Hat开发和维护的框架&#xff0c;旨在结合GWT和JEE世界的优点。 根据Red Hat的说法&#xff0c;Errai是基于GWT的框架&#xff0c;用于使用下一代Web技术构建富Web应用程序。 在此简单声明的背后&#xff0c;存在一种与GWT完全不同的开发方式&#xff0c;在下面的文…

动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特

手机与我们每日相伴&#xff0c;我们总会精心挑选各种图片设置为手机壁纸&#xff0c;有时换个壁纸就像换了一种心情一样。但网上搜索的壁纸大同小异&#xff0c;有没有风格独特又有趣的&#xff1f;今天就给大家推荐4款各具特色的壁纸App&#xff0c;保证给你耳目一新的感觉。…

在线生成安卓APP图标

移动应用图标/启动图生成工具&#xff0c;一键生成所有尺寸的应用图标/启动图 在线生成安卓APP图标生成 图标在 线 在线图标 安卓图标 生成图标 https://icon.wuruihong.com/ 在线png图片压缩 png压缩 https://compresspng.com/zh/ 在线gif图片压缩 gif压缩 https://www.soog…

NOIP模拟测试29「爬山·学数数·七十和十七」

爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左面第一个大于当前值的值,极右值为右面第一个大于当前值的值 ,找到最大值…

手机音频拼接软件_良心分享:业界最顶尖的软件!

01短视频的爆火&#xff0c;让全民都接触了“剪辑”要知道在最最最开始大众离它很远&#xff0c;更多是一种职业而非爱好最具影响力的是抖音、B站等平台抖音让更多人接触到了剪辑哔哩让更多人学会剪辑技术虽然抖音的视频时长普遍较短但这并不妨碍剪辑技术的展现比如&#xff0c…

java堆内存和堆外内存_Java堆空间,本机堆和内存问题

java堆内存和堆外内存最近&#xff0c;我正在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多。 代码创建的所有Java对象都是在Java堆空间内创建的&#xff0c;其大小由-Xmx选项定义。 但是一个Java进程由很多空间组成&#xff0c;而不仅仅是Java堆空间…

springboot实践1

环境安装 安装jdk 推荐安装jkd1.8,我使用的是mac&#xff0c;假设已经安装好homebrew,则jdk的安装指令是&#xff1a; brew install java 在 ~/zshrc ,添加两行 export JAVA_HOME你的jdkPath export PATH$PATH:$JAVA_HOME;然后保存&#xff1b; 输入 echo ${JAVA_HOME} 回车&…

电脑入门基础教程_ARM入门最好的文章------转载一位资身工程师的入门心得

开始学ARM一团雾水,不知道如何入手.这个介绍的比较全面.本人认为aRM入门最好的文章1. 抓住51开发ARM这几个月来我一直都爬在51的问题&#xff0c;自己都有一点笑自己了&#xff0c;用了4个月的时间&#xff0c;来巩固51的原理和程序&#xff0c;还好我自己算是走过来了&#xf…

项目包装组织

程序包是Java的基本概念&#xff0c;是您开始用该语言编程时偶然发现的第一件事。 作为一个初学者&#xff0c;您可能不太在意软件包的结构&#xff0c;但是随着您成为经验丰富且成熟的软件开发人员&#xff0c;您开始思考可以采取哪些措施来提高其效率。 有几个主要选项需要考…

NOIP模拟测试30「return·one·magic」

magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i1}^{i<N} [gcd(i,N)1] C_{G}^{i} \%phi(p)}\%p$ 根据欧拉函数是积性的得出$phi(54184622)phi(2)*phi(27092311)$ 然后$phi(27092311)27092310$ $phi(2)1$所以$phi(541…

python作用域的理解-理解Python的UnboundLocalError(Python的作用域)

今天写代码碰到一个百思不得解为什么会出错的代码&#xff0c;简化如下&#xff1a; 1 2 3 4 5 6 7 x10 deffunc(): ifsomething_true(): x20 print(x) func() 意图很明显&#xff0c;首先我定义了一个全局的x&#xff0c;在函数中&#xff0c;如果有特殊需要&#xff0c;就重新…

threadlocals_如何使用ThreadLocals射击自己

threadlocals它将很好地启动。 像大多数故事一样。 您会发现一个新概念&#xff0c;并对其功能感到惊讶。 然后突然装备了这把新锤子&#xff0c;一切开始看起来像钉子。 根据我们过去几个月的经验&#xff0c; java.lang.ThreadLocal真是一锤定音。 我想这全都归结为ThreadLo…

ASP.NET Core Web API

1.简单介绍 ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能。ASP.NET Core MVC 包含了对 Web API 的支持。可以构建多种客户端的 HTTP 服务。ASP.NET Core Web API可用于在 .NET Core 上构建 RESTful 应用程序。 框架包含对 HTTP 内容协商的支持&#xff0c;内置支持以 …

win8配置_《FIFA 20》PC配置公布 最低仅需i3+GTX660

EA公布了新作《FIFA 20》的PC配置需求&#xff0c;玩家最低仅需 i3-2100 GTX 660 显卡即可进行游戏&#xff0c;推荐配置则为 i3-6300T GTX 670 显卡&#xff0c;考虑到本作的逼真画面效果&#xff0c;这配置可以说是非常亲民&#xff0c;另外硬盘空间需要大约 50 GB。最低配…

Thymeleaf + Spring中的验证

总览 我们将要讨论的重要主题涉及空值&#xff0c;空字符串和输入验证&#xff0c;因此我们不会在数据库中输入无效数据。 在处理空值时&#xff0c;我们使用了Java 1.8中引入的java.util.Optional 。 0 – Spring Boot Thymeleaf示例表单验证应用程序 我们正在为一所大学构…