使用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.

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 编码是…

Java反射(Reflection)

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

超详细的MySQL三万字总结

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

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

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

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

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

Postman使用详解

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

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

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

SharePoint 2013 workflow cannot start automatically when you logged in site as a system account

I have created one simple workflow on custom list using SharePoint designer 2013.While designing workflow, I have unchecked the “Allow this workflow to be manually started” and select rest two options like “Start workflow automatically when an item is c…

哥斯拉Godzilla shell管理工具

各大厂商的waf不断&#xff0c;在静态查杀、流量通信等方面对webshell进行拦截&#xff0c;众红队急需一款优秀的权限管理工具&#xff0c;冰蝎3.0的发布可能缓解了流量加密的困境&#xff0c;但是冰蝎3.0的bug众多&#xff0c;很多朋友甚至连不上冰蝎的shell&#xff0c; 于是…

git信息泄露漏洞

git信息泄露漏洞 当前大量开发人员使用git进行版本控制&#xff0c;对站点自动部署。如果配置不当&#xff0c;可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。 危害 攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据…

功能项目拼图将Java 9引入

因此&#xff0c;拼图项目...我们已经对此颇为了解&#xff0c;但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点&#xff0c;并介绍项目的核心概念和功能。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序&#xff08;不同于发布顺序…

2021Kali -- 木马免杀制作

​知道为什么梦里的人都看不清脸么&#xff1f;因为怕你当真。。。 ---- 网易云热评 一、通过MSF生成shellcode 1、启动MSF&#xff0c;演示版本是6.0.36 2、通过msfvenom生成相关代码 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b \x00 l…

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;而YOLO&#xff08;You Only Look Once&#xff09;是一个流行的实时对象检测系统。对于大学生和初学者而言&#xff0c;掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…

目录爆破工具 -- dirsearch

我记得&#xff0c;以前总会和你聊的很晚很晚&#xff0c;现在我们不再说话了&#xff0c;我还是会熬夜&#xff0c;但我想&#xff0c;不如从今天开始早点睡吧。。。 一、环境&#xff1a;Kali2020.01、Python3.0 二、安装过程&#xff1a; 1、复制dirsearch到本地安装包 gi…

java coin介绍_代码示例中的Java 7:Project Coin

java coin介绍该博客通过代码示例介绍了一些新的Java 7功能&#xff0c;这些项目在Project Coin一词下进行了概述。 Project Coin的目标是向JDK 7添加一组小的语言更改。这些更改确实简化了Java语言语法。 更少的打字&#xff0c;更简洁的代码&#xff0c;愉悦的开发人员&#…

在Java中实现过滤器和面包店锁

为了了解锁的工作方式&#xff0c;实现自定义锁是一个好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁&#xff08;自旋锁&#xff09;&#xff0c;并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法&#xff0c;面包房锁…