java8 函数式编程

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

除工作外,他还对编程语言,高效算法和数据结构感兴趣。 Daniel撰写了有关使用Java和Scala的Play框架构建Web应用程序的简短书《 Play Framework Starter》 ,并且最近正在创建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

java8 函数式编程

java8 函数式编程_使用Javaslang进行Java 8中的函数式编程相关推荐

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

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

  2. java scoket网络编程_嵌入式狗的JAVA之路 socket 网络编程

    又前进一步,进入网络编程. 虽然很多内容没有深入,不过近期还是追求尽量多吸收知识吧,然后在具体项目中深入. IP 端口 定义 TCP UDP通信 http 80 ftp 21 telnet 23 ja ...

  3. Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?

    苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 我国宋代禅宗大师青原行思在<三重境界>中有这样一句话:" 参禅之初 ...

  4. java8 垃圾 不同_【不同的Java垃圾回收器的比较】

    现在已经是2014年了,但是对大多数开发人员而言有两件事情仍然是个谜--java垃圾回收以及异性(码农又被嘲笑了).由于我对后者也不是特别了解,我想我还是试着说说前者吧,尤其是随着Java8的到来,这 ...

  5. java8 默认方法_默认方法:Java 8的无名英雄

    java8 默认方法 几周前,我写了一个博客,说开发人员学习新语言是因为它们很酷. 我仍然坚持这个主张,因为关于Java 8的事情真的很酷. 尽管毫无疑问,该节目的明星是添加了Lambdas和将函数提 ...

  6. java漂亮界面编程_计算机二级之JAVA篇

    Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.深受程序员们的追捧,据TIBOE ...

  7. javaslang_使用Javaslang的Java 8中的功能数据结构

    javaslang Java 8的lambda(λ)使我们能够创建出色的API. 它们极大地提高了语言的表达能力. Javaslang利用lambda来基于功能模式创建各种新功能. 其中之一是功能性集 ...

  8. 带有Javaslang的Java 8中的功能数据结构

    Java 8的lambda(λ)使我们能够创建出色的API. 它们令人难以置信地提高了语言的表达能力. Javaslang利用lambda来基于功能模式创建各种新功能. 其中之一是功能性集合库,旨在替 ...

  9. Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

    写在开头 这些年,随着CPU.内存.I/O 设备都在不断迭代,不断朝着更快的方向努力.在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异.CPU 和内存的速度差异可以形象地描述为:C ...

最新文章

  1. 表单和v-model
  2. Java8 Stream性能如何及评测工具推荐
  3. 金融风控实战——特征工程上
  4. Android 百度地图开发(一)
  5. 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村
  6. python socket udp_python网络-Socket之udp编程(24)
  7. 我终于知道公司前端为啥不加班了…
  8. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)
  9. 做好准备,让你的短信应用迎接Android 4.4(KitKat)
  10. Java:集合系列目录(Category)
  11. python海龟作图不用循环_10分钟,利用聪明的小海龟可以制作出绚丽的视觉效果,你信不信呢...
  12. 通过CocoCut插件和m3u8下载器下载网页视频并转换成mp4格式
  13. erdas2015几何校正模块在哪_几何校正和正射校正,怎样用erdas做几何校正?
  14. Java中输入一个整形数组,输出其最大值。
  15. bilibili怎么用用户名登录_b站账号(bilibili免费账号密码)
  16. 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解
  17. js实现手机端摇一摇
  18. 火爆社区的开源数据可视化工具 datart 新用户体验教程
  19. 《Linux命令速查手册》笔记
  20. 计算机类在职研究生考试有哪些专业,计算机在职研究生考试科目有哪些?

热门文章

  1. P5287-[HNOI2019]JOJO【KMP】
  2. P3261-[JLOI2015]城池攻占【左偏树】
  3. P3391-[模板]文艺平衡树【Splay】
  4. POJ1179,P4342-[IOI1998]Polygon【区间dp】
  5. Wannafly挑战赛19
  6. 1、mybatis是什么?为什么要用mybatis?
  7. Maven的pom.xml文件详解------Build Settings
  8. 面试官让我讲下线程的TIMED_WAITING状态,我又笑了
  9. JavaFX UI控件教程(十三)之Table View
  10. 自定义ClassLoader和双亲委派机制