使用Javaslang进行Java 8中的函数式编程

我们非常高兴地在jOOQ博客上宣布一个客座帖子,该帖子由HSH Nordbank的高级软件工程师,三个孩子的父亲, Daniel Dietrich撰写。 他目前作为项目负责人和首席开发人员为金融产品创建定价框架。

丹尼尔·迪特里希

除工作外,他还对编程语言,高效算法和数据结构感兴趣。 Daniel撰写了简短的书《 Play Framework Starter》 ,内容涉及使用Java和Scala的Play框架构建Web应用程序,并且他最近正在创建Javaslang,这是Java 8的功能组件库 ,尤其引起了我们的兴趣。

当我听说Java将获得lambda时,这真是一个激动人心的时刻。 使用函数作为抽象手段的基本思想起源于80年前的“ lambda演算”。 现在,Java开发人员可以使用函数传递行为。

List<Integer> list = Arrays.asList(2, 3, 1);// passing the comparator as lambda expression
Collections.sort(list, (i1, i2) -> i1 - i2);

Lambda表达式大大降低了Java的冗长性。 新的Stream API弥补了lambda和Java集合库之间的空白。 仔细观察显示,并行流很少或至少谨慎使用。 流无法重用,并且烦恼的是必须将集合前后转换。

// stream a list, sort it and collect results
Arrays.asList(2, 3, 1).stream().sorted().collect(Collectors.toList());// a little bit shorter
Stream.of(2, 3, 1).sorted().collect(Collectors.toList());// or better use an IntStream?
IntStream.of(2, 3, 1).sorted().collect(ArrayList::new, List::add, List::addAll);// slightly simplified
IntStream.of(2, 3, 1).sorted().boxed().collect(Collectors.toList());

哇! 这些是一些用于对整数列表进行排序的变体。 通常,我们想专注于什么,而不是把头放在如何做上 。 不需要额外的复杂性。 这是使用Javaslang达到相同结果的方法 :

List.of(2, 3, 1).sort();

通常,每种面向对象的语言都有一个命令式核心,Java也是如此。 我们使用条件语句和循环来控制应用程序的流程。

String getContent(String location) throws IOException {try {final URL url = new URL(location);if (!"http".equals(url.getProtocol())) {throw new UnsupportedOperationException("Protocol is not http");}final URLConnection con = url.openConnection();final InputStream in = con.getInputStream();return readAndClose(in);} catch(Exception x) {throw new IOException("Error loading location " + location, x);}
}

功能语言使用表达式而不是语句,我们认为是值。 Lambda表达式可帮助我们转换值。 这是一个使用Javaslang的Try示例:

Try<String> getContent(String location) {return Try.of(() -> new URL(location)).filter(url -> "http".equals(url.getProtocol())).flatMap(url -> Try.of(url::openConnection)).flatMap(con -> Try.of(con::getInputStream)).map(this::readAndClose);
}

结果是包含内容的Success或包含异常的Failure 。 通常,与命令式风格相比,此概念更加简洁,并且可以生成我们可以推理的健壮程序。

希望这篇简短的介绍引起您对javaslang.com的关注 ! 请访问该站点以了解有关使用Java 8和Javaslang进行函数式编程的更多信息。

翻译自: https://www.javacodegeeks.com/2015/05/functional-programming-in-java-8-with-javaslang.html

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

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

相关文章

HFS远程命令执行漏洞复现

漏洞程序下载地址:Http File Server 这里说一下&#xff0c;在Windows server 2003中复现时&#xff0c;我直接使用Administrator用户登录&#xff0c;然后复现&#xff0c;未出现权限问题。再Windows 10中尝试复现时发现权限不足&#xff0c;需要以管理员权限执行漏洞程序。 运…

HTML标签速查表

有时候,学习的前端的标签太多,容易记不牢,这里整理一份标签速查表,便于查阅。不区分html或html5.

Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示

定义依赖属性作为datagrid的数据源 protected static readonly DependencyProperty ViewLogsProperty DependencyProperty.Register("ViewLogs", typeof(ObservableCollection<RMSReportEvent>), typeof(LogViewer), new PropertyMetadata(null)); protected …

java解析java源码_JAVA语言-Java源码解析-Stack源码分析

一、简介stack类图.png栈是数据结构中一种很重要的数据结构类型&#xff0c;因为栈的后进先出功能是实际的开发中有很多的应用场景。Java API中提供了栈(Stacck)的实现。Stack类继承了Vector类&#xff0c;而Vector类继承了AbstractList抽象类&#xff0c;实现了List类&#xf…

渗透测试神器CS(4.0)的使用

CS CS简介CS功能安装CSCS的基本使用深入标题介绍 Beacon Commands基础操作演示 CS简介 CS 是Cobalt Strike的简称&#xff0c;是一款渗透测试神器&#xff0c;常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用&#xff0c;它分为客户端与服务端&…

UTF-8和GBK有啥区别?

粉丝求助: 如何解决: 把编辑器和浏览器的字符集统一设置成utf-8或者gbk即可。 主要区别: 1.GBK是在bai国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不du是国家标准)。zhiGBK编码dao专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。 2. UTF-8 编码是…

服务osgi_OSGi –具有服务的简单Hello World

服务osgi在本文中&#xff0c;我们将使用OSGi开发一个简单的Hello World应用程序。 我们将使用Felix作为OSGi容器 。 在下一篇文章中&#xff0c;我们将继续使用该应用程序&#xff0c;并使用Spring Dynamic Modules对其进行改进。 为了使开发有趣&#xff0c;我们将创建两个捆…

Java反射(Reflection)

基本概念 在Java运行时环境中&#xff0c;对于任意一个类&#xff0c;能否知道这个类有哪些属性和方法&#xff1f;对于任意一个对象&#xff0c;能否调用它的任意一个方法&#xff1f; 答案是肯定的。 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射&…

超详细的MySQL三万字总结

文章目录 MySQL基础数据库的介绍数据库概述数据的存储方式数据库的概念常见数据库排行榜 数据库的安装与卸载数据库的安装数据库的卸载 数据库服务的启动与登录Windows 服务方式启动DOS 命令方式启动控制台连接数据库SQLyog 图形化工具——客户端使用 SQLyog 登录数据库数据库…

map转字符串数组中 php_js将map转换成数组

linux中oops信息的调试及栈回溯【转】本文转载自:http://blog.csdn.net/kangear/article/details/8217329 ...linux 2&period;6 驱动笔记(一)本文作为linux 2.6 驱动笔记,记录环境搭建及linux基本内核模块编译加载. 环境搭建: 硬件:OK6410开发板 目标板操作系统:linux 2.6…

你要的能做出炫酷图表的网站来啦

不需要多高深的技术&#xff0c;也不需要多长时间&#xff0c;分分钟让小白都能做出超好看的图表~ 1.DataV DataV 是阿里云出品的在线可视化工具&#xff0c;可以将超多数据&#xff0c;放在一块大屏上 2.网易有数 网易有数的特点是&#xff0c;编辑页面自由度非常高&#x…

ecshop获取客户端操作系统

<?php /*** 获得客户端的操作系统** access private* return void*/ function get_os() {if (empty($_SERVER[HTTP_USER_AGENT])){return Unknown;}$agent strtolower($_SERVER[HTTP_USER_AGENT]);$os ;if (strpos($agent, win) ! false){if (strpos($agent, nt 5.1…

求有向图中两点最短距离java_算法题解:求有向图中的最短路径(JAVA+DFS算法实现)...

求有向图中的最短路径(JAVADFS算法实现)问题描述给定一个有向图&#xff0c;如下图所示&#xff0c;求从1号顶点到5号顶点的最短路径。输入数据格式为第一行输入顶点数和边数&#xff0c;从第二行开始每一行输入3个整数&#xff0c;分别代表连接顶点的边和权重。例如&#xff1…

B站学习资源汇总

一个B站就足够解决绝大多数学习问题。 AI入门 1、Crash Course AI https://space.bilibili.com/276373762/channel/detail?cid=101907 课程介绍:该课程出自Crash Course,首发YouTube,单个视频时长均在10分钟左右。视频节奏非常好,语速偏快,适合下饭时间入门了解。主讲…

30个Java入门技巧和最佳实践

Java是最流行的编程语言之一-无论是Win应用程序&#xff0c;Web应用程序&#xff0c;移动&#xff0c;网络&#xff0c;消费电子产品&#xff0c;机顶盒设备&#xff0c;Java随处可见。 在Java上运行的设备超过30亿。 据甲骨文称 &#xff0c;正在使用50亿张Java卡。 超过900…

Postman使用详解

一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的&#xff0c;用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网…

java double精确比较,Java float比double更精确?

Code:class Main {public static void main (String[] args) {System.out.print("float: ");System.out.println(1.35f-0.00026f);System.out.print("double: ");System.out.println(1.35-0.00026);}}Output:float: 1.34974double: 1.3497400000000002??…

《Bash 脚本教程》免费发布啦,开源!

一共写了 20 节&#xff0c;Bash 脚本编程的主要语法&#xff0c;都包括在内了&#xff0c;日常使用应该足够。也欢迎初学者使用这个教程&#xff0c;学习 Bash。 这个教程是开源的&#xff0c;你可以克隆它的代码仓库&#xff0c;放在本地&#xff0c;也可以提交 issue 和 pu…

linux脚本编程(shell)浅介 (转载)

linux脚本(shell)编程 啊&#xff0c;昨天上网看到一篇讲 linux/unix shell 的文章&#xff0c;想想自己最后写这东西也是一年前的事了&#xff0c;想想都快忘光了。 还是整理一下&#xff0c;做一次回顾&#xff0c;以后说不定还用得上&#xff1b;帖出来&#xff0c;方便第一…

postman插件下载安装教程(详细)

一、前言 postman是一款强大网页接口调试工具&#xff0c;我们在平时开发过程中经常会使用到&#xff0c;一般使用最多的是postman的客户端&#xff0c;实际上postman在谷歌浏览器上也提供了插件&#xff0c;可以不必要安装客户端进行接口测试工作。 建议更新到最新谷歌浏览器&…