在Java 8 Lambda上使用Apache Commons Functor功能接口

Apache Commons Functor (以下稱為[functor])是一個Apache Commons組件,它提供功能性的編程API和已實現的幾種模式(訪問者,生成器,聚合器等)。 Java 8具有幾個不錯的新功能,包括lambda表達式和函數接口 。
在Java 8中,lambdas或lambdas表達式是閉包 ,可以對其求值并表現為類似于匿名方法的行為。
功能接口是僅一種方法的接口。 這些接口可以在lambda中使用,并且可以節省編寫匿名類甚至實現接口的時間。 [functor]提供了幾個功能接口(感謝Matt Benson )。 它尚未發布,但是在項目站點中, SVN的主干中有一些新示例。 我將使用這些示例之一來說明[functor]功能接口如何與Java 8 lambda結合使用。 在Java 8中帶有[functor]的示例之后,我將說明如何在Eclipse中運行Java 8(有點像gambiarra ,但效果很好)。

[functor]例子

這是一個帶有謂詞的簡單示例。

Listnumbers = Arrays.asList(1, 2, 3, 4);UnaryPredicateisEven = new UnaryPredicate() {public boolean test(Integer obj) {return obj % 2 == 0;}
};for( Integer number : numbers ) {if (isEven.test(number)) {System.out.print(number + ' ');}
}

它僅打印通過謂詞測試的那些偶數。

Lambdas的[functor]示例

此修改的版本使用Java 8 lambda

List numbers = Arrays.asList(1, 2, 3, 4);UnaryPredicate isEven = (Integer obj) -> { return obj % 2 == 0; };for( Integer number : numbers ) {if (isEven.test(number)) {System.out.print(number + " ");}
}

行為是相同的。 UnaryPredicate是一個功能接口。 它唯一的方法是boolean test(A obj); 。 當在lambda表達式中使用時,您只需要提供正確數量的參數并實現閉包代碼即可。

這兩個代碼段的區別在于創建偶數的UnaryPredicate的方式。 在下面,您可以看到使用和不使用Java 8 lambda的兩種創建謂詞的方法。

// pre-java-8
UnaryPredicate isEven = new UnaryPredicate() {public boolean test(Integer obj) {return obj % 2 == 0;}
};// with lambda-8
UnaryPredicate isEven = (Integer obj) -> { return obj % 2 == 0; };

Eclipse中的Java 8

Eclipse 8不支持Java 8,因此您必須創建一個新的構建器才能使Eclipse編譯項目的源代碼。 有關如何設置Eclipse Juno和Java 8的完整分步指南,請參閱http://tuhrig.de/?p=921 。 我將在此處總結步驟,并說明如何將[functor] jar包含到項目類路徑中。

  • 從http://jdk8.java.net/lambda下載JDK并安裝(我安裝在/opt/java/jdk1.8.0中
  • 在Eclipse中創建一個新的Java項目(在我的情況下為try-lambdas
  • 從您的Eclipse項目中禁用默認的Java Builder ,因為它不適用于Java 8
  • 創建一個新的生成器。 當出現允許您瀏覽程序的屏幕提示時,選擇Java 8 javac(對我來說是/opt/java/jdk1.8.0/bin/javac
  • 將以下參數添加到您的構建器中:
    -classpath %CLASSPATH%;commons-functor-1.0-SNAPSHOT-jar-with-dependencies.jar;.
    -source 8
    -d ${workspace_loc:/lambdas}/bin
    ${workspace_loc:/Java8}/src/lambdas/*.java

您必須包括[functor]的jar及其依賴項。 為了方便起見,我使用maven-assembly-plugin生成了一個帶有[functor]依賴項的jar。 可從此GitHub存儲庫中獲取代碼和jar。 或者,如果您希望生成具有依賴項的自己的[functor] jar,請從存儲庫中簽出代碼,如下所示。

svn checkout https://svn.apache.org/repos/asf/commons/sandbox/functor/trunk/ commons-functor

最后,在運行mvn clean assembly:assembly之前,將以下內容包含到[functor] pom.xml中

<plugin><artifactId>maven-assembly-plugin</artifactId><version>2.3</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration>
</plugin>

參考:來自Kinoshita博客博客的JCG合作伙伴 Bruno Kinoshita 將Apache Commons Functor功能接口與Java 8 lambda結合使用 。

翻譯自: https://www.javacodegeeks.com/2012/12/using-apache-commons-functor-functional-interfaces-with-java-8-lambdas.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/369986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/369986.shtml
英文地址,請注明出處:http://en.pswp.cn/news/369986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML5 Canvas游戲開發實戰 PDF掃描版

HTML5 Canvas游戲開發實戰主要講解使用HTML5 Canvas來開發和設計各類常見游戲的思路和技巧&#xff0c;在介紹HTML5 Canvas相關特性的同時&#xff0c;還通過游戲開發實例深入剖析了其內在原理&#xff0c;讓讀者不僅知其然&#xff0c;而且知其所以然。在本書中&#xff0c;除…

多線程之創建線程

在Java中&#xff0c;線程能區分兩種不同類型的線程&#xff1a;前臺線程和后臺線程。這兩者的區別就是&#xff1a;應用程序必須運行完所有的前臺線程才可以退出&#xff1b;而對于后臺線程&#xff0c;應用程序則可以不考慮其是否已經運行完畢而直接退出&#xff0c;所有的后…

阿 Q 的停車場

問題描述 剛拿到駕照的 KJ 總喜歡開著車到處兜風&#xff0c;玩完了再把車停到阿 Q 的停車場里&#xff0c;雖然 她對自己停車的水平很有信心&#xff0c;但她還是不放心其他人的停車水平&#xff0c;尤其是 Kelukin。于是&#xff0c; 她每次都把自己的愛車停在距離其它車最遠…

css3圖片垂直居中

圖片相對父元素垂直居中, css3屬性給父級元素設置 display: -webkit-box; -moz-box-align: center; -webkit-box-align: center; -moz-box-pack: center; -webkit-box-pack: center; 需要注意的是&#xff1a; 父級元素要有確定的高度&#xff01;

聲明式的理解【gpt】

一 MyBatis采用了聲明式語法來進行SQL映射配置【mybatis聲明式】 MyBatis是一款優秀的持久層框架&#xff0c;支持自定義SQL、存儲過程以及高級映射&#xff0c;使得開發人員能夠專注于SQL本身而不是數據庫訪問。MyBatis提供了兩種配置方式&#xff1a;XML配置和注解配置&…

網絡局域網看不到其它計算機,局域網中看不到其它計算機怎么辦

通過網上鄰居或查看網絡計算機時&#xff0c;看不到局域網中其它計算機&#xff0c;這是怎么回事呢?下面是學習啦小編給大家整理的一些有關看不到局域網中其它計算機的解決方法&#xff0c;希望對大家有幫助!局域網中看不到其它計算機的解決方法打開“控制面板”-“網絡和Inte…

iconfont 圖標轉為字體_iconfont字體圖標的使用方法--超簡單!

我之前因為項目用bootstrap比較多,所以使用font awesome字體圖標比較多,后來接觸到了iconfont,發現想要的什么圖標都有,還可以自定義圖標,非常強大!之前看了一波教程,覺得繁瑣,自己弄明白后感覺如此簡單,做了這么個簡單教程,直接上圖,簡單粗暴,避免新手走彎路,這里講解的默認是…

一罐來統治所有人

跳下內存通道 早在1998年&#xff0c;當我是一名C / C 開發人員時&#xff0c;嘗試使用Java時&#xff0c;有關該語言的一些內容對我來說就顯得有些惱火了。 我記得很擔心這些 為什么沒有合適的編輯器呢&#xff1f; C / C 有很多。 我為Java擁有的只是舊的記事本。 當我想要…

Django集合Ueditor

語言版本環境&#xff1a;python3.6 1、win安裝步驟&#xff1a; 1 git下載源碼https://github.com/zhangfisher/DjangoUeditor 2 解壓DjangoUeditor3-master.tar 3 cd C:\Users\fj\Desktop\DjangoUeditor3-master 4 python setup.py install 官方建議使用pip install Djang…

計算機二級高級應用考題,2016計算機二級MSOFFICE高級應用考試真題

2016計算機二級MSOFFICE高級應用考試真題離2016上半年的計算機等級考試只有一個多月了&#xff0c;為了幫助大家盡快考試過關&#xff0c;小編整理了計算機二級office考試題&#xff0c;希望能幫助到大家!(1)下列敘述中正確的是A)一個算法的空間復雜度大&#xff0c;則其時間復…

ANTLR –語義謂詞

用antlr解析簡單的語法很簡單 。 您要做的就是使用正則表達式描述您的語言&#xff0c;并讓antlr生成詞法分析器和解析器。 解析大型或復雜的語言有時會需要更多&#xff0c;因為僅使用正則表達式描述它們是困難的&#xff0c;甚至是不可能的。 語義謂詞是在語法內部編寫的Jav…

python輸入一個數組輸出24進制式的時間_4.4 用于數組的文件輸入輸出 線性代數...

Numpy能夠讀寫磁盤上的文本數據或二進制數據。這一小節只討論Numpy的內置二進制格式&#xff0c;因為更多的用戶會使用pandas或其它工具加載文本或表格數據(見第6章)。np.save和np.load是讀寫磁盤數組數據的兩個主要函數。默認情況下&#xff0c;數組是以未壓縮的原始二進制格式…

DBMS-數據庫設計與E-R模型:E-R模型、約束、E-R圖、E-R擴展特性、E-R圖轉換為關系模式、UML建模...

設計過程概覽 1. 設計階段 最初階段&#xff1a;刻畫未來數據庫用戶的數據需求&#xff0c;產品為用戶需求規格說明&#xff1b; 概念設計階段&#xff08;conceptual-design phase&#xff09;&#xff1a;&#xff08;關注描述抽象數據及其聯系&#xff0c;通常使用實體-聯系…

tooltip.css-2.0文檔

tooltip.css 純CSS鼠標提示工具。 v. 2.0.0 更新日期&#xff1a;2018.4.12 預覽DEMO。 安裝&#xff1a; 只需在頁面中引入"tooltip.css"或“tooltip.min.css”文件即可。 如&#xff1a; <link rel"stylesheet" href"css/tooltip.css"…

Java虛擬機:如何判定哪些對象可回收?

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請注明出處&#xff0c;歡迎交流學習&#xff01; 在堆內存中存放著Java程序中幾乎所有的對象實例&#xff0c;堆內存的容量是有限的&#xff0c;Java虛擬機會對堆內存進行管理&#xff0c;回收已經“死去”的對象&…

html標簽object和embed,html標簽object和embed的區別

object和embed的區別The code in bold above is the actual code that you need to place in your page to embed a FusionCharts chart.In the above code, weveused and tags to embed the 3D Column Chart (Column3D.swf) within the HTML page.used &dataUrlData.xml u…

Apache Apollo REST API

Apache Apollo是新一代&#xff0c;高性能&#xff0c;多協議的消息傳遞代理&#xff0c;它是從頭開始構建的&#xff0c;可以替代ActiveMQ5.x。 我過去曾在博客上發表過文章 &#xff08;第一部分已經與第二部分一起發布了&#xff09;。 Apollo的非阻塞異步體系結構使其速度…

bzoj1588 [HNOI2002]營業額統計

1588: [HNOI2002]營業額統計 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 17931 Solved: 7391[Submit][Status][Discuss]Description 營業額統計 Tiger最近被公司升任為營業部經理&#xff0c;他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 T…

python管道通信_Python進程通信之匿名管道實例講解

匿名管道管道是一個單向通道,有點類似共享內存緩存.管道有兩端,包括輸入端和輸出端.對于一個進程的而言,它只能看到管道一端,即要么是輸入端要么是輸出端.os.pipe()返回2個文件描述符(r, w),表示可讀的和可寫的.示例代碼如下:復制代碼 代碼如下:#!/usr/bin/pythonimport timeim…

css3中的box-sizing屬性的使用

box-sizing屬性用來定義元素的width和height所表示的區域,該屬性一般有三種值&#xff1a;content-box、border-box、inherit。 其中inherit表示box-sizing的值應該從父元素繼承。 content-box和border-box的主要區別就是元素的width和height的值包不包括border、padding這兩…