使用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
總結
以上是生活随笔為你收集整理的使用Javaslang进行Java 8中的函数式编程的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 最好用电脑杀毒软件(最好电脑杀毒软件排名
- 下一篇: 吃鸡闪退电脑黑屏(电脑吃鸡突然闪退)
