600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java8 函数式编程_使用Javaslang进行Java 8中的函数式编程

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

时间:2021-03-30 00:12:00

相关推荐

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

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 expressionCollections.sort(list, (i1, i2) -> i1 - i2);

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

// stream a list, sort it and collect resultsArrays.asList(2, 3, 1).stream().sorted().collect(Collectors.toList());// a little bit shorterStream.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 simplifiedIntStream.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。 通常,与命令式风格相比,此概念更加简洁,并且可以生成我们可以推理的健壮程序。

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

翻译自: //05/functional-programming-in-java-8-with-javaslang.html

java8 函数式编程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。