JDK8 lambda的会话指南–术语表
上次出現…我寫了一篇與JDK8為我們提供的新方法有關的文章。 最令我興奮的功能是lambda。 我必須承認,在即將成為浪子的第一年(在此期間,我使用C#開發了該產品),我喜歡LINQ和它可以做的漂亮,優雅的事情。 現在,即使擦除仍然在我們上次離開的地方,現在我們有了更好的過濾,更改,遍歷集合以及語法糖旁邊的方法,這也可能使您正確使用四核處理器你向朋友吹牛。 在談論朋友時,這篇文章是與lambda和流處理相關的術語摘要,當他們問您:“ <DKD 8中與lambdas相關的那個地名>是什么? 我無意提供完整列表或lambda指南,如果我說錯了什么或錯過了什么,請告訴我...
功能界面:
根據[jls 8],功能接口是僅具有一個抽象方法的接口,因此表示單個功能協定(在某些情況下,此“單個”方法可以采用具有等效等效簽名的多個抽象方法的形式( [jls7_8.4.2])從超級接口繼承;在這種情況下,繼承的方法在邏輯上表示單個方法。
@FunctionalInterface –用于指示接口應為功能接口。 如果注釋放置在實際上不是的接口上,則會發生編譯時錯誤。
例如:
interface Runnable { void run(); }Runnable接口是一個非常合適的示例,因為當前存在的唯一方法是run方法。 功能接口的另一個Java“經典”示例是Comparator <T>接口,在下面的示例中是前面提到的接口,并且equals方法繼承自Object ,該接口仍然起作用,因為compare方法是唯一的抽象方法,而equals繼承自超類。
interface Comparator<T> {boolean equals(Object obj);int compare(T o1, T o2);}流
流 –根據[牛津詞典],在計算中是連續的數據或指令流,通常具有恒定或可預測的速率。
從JDK 8 流開始,代表一種機制,用于通過計算管道從數據源傳送元素。 流可以用作數組,集合,生成器功能,I / O通道的數據源。 獲取流:
- 從Collection通過stream()和/或parallelStream()方法;
- 通過Arrays.stream(Object[])從數組
- 從流類的靜態工廠方法開始,例如Stream.of(Object[]) , IntStream.range(int, int)或Stream.iterate(Object, UnaryOperator) ;
- 可以從BufferedReader.lines();獲得文件的行BufferedReader.lines();
- 可以從Files中的方法獲取文件路徑流。
- 可以從Random.ints();獲得隨機流Random.ints();
- JDK中的許多其他流承載方法, including BitSet.stream() , Pattern.splitAsStream(java.lang.CharSequence)和JarFile.stream() 。
流操作 – 對流執行的操作。 從流操作的角度來看,有兩種類型的操作:中間操作和終端操作
流中間操作 –縮小流內容的操作。 中間操作本質上是惰性的–實際不更改流的內容,而是創建另一個更窄的流。 僅在調用終端操作時才開始流的遍歷。
- filter –根據提供的謂詞過濾流
- map –通過將映射函數應用于初始流中的每個元素來創建新流(每種數字類型的對應方法:int,long,double)
- flatMap –一種操作,其作用是對流的元素進行一對多轉換,然后將結果元素展平為新的流。 例如,如果訂單是采購訂單流,并且每個采購訂單都包含一個訂單項集合,則以下內容將生成一個訂單項流:
- 與眾不同–返回不同的操作流
- 已排序–返回已排序操作流
- peek –調試專用的方法,該方法返回由該流元素組成的流,所提供的操作在每個元素上執行
例如:
list.stream().filter(filteringFunction).peek(e -> {System.out.println("Filtered value: " + e); });.map(mappingFunction).peek(e -> {System.out.println("Mapped value: " + e); });.collect(Collectors.intoList());- limit –返回當前流的截斷版本(不超過元素的限制數量)
- substream –返回一個由剩余元素組成的流,該元素從起始位置開始,或者在startPosition和endPosition之間
流終端操作 –遍歷流以產生結果或副作用。 執行完終端操作后,該流被視為已消耗(在已消耗的流上調用另一個操作將拋出IllegalStateException )。 終端操作本質上是急切的,除了iterator()和splititerator()為那些在API中找不到所需功能的人提供了擴展機制。
- forEach –將提供的操作應用于流的每個元素。 也存在forEachOrdered版本
- toArray –將流的元素提取到數組中
- 減少–減少方法
- 收集-可變還原法
- min –計算流的最小值
- max –計算流的最大值
- count –計算流中的元素
- anyMatch –如果存在與提供的條件匹配的元素,則返回true
- allMatch –如果所有元素都匹配,則返回true
- noneMatch –如果所有元素都不匹配,則返回true
- findFirst –查找與提供的條件匹配的第一個元素
- findAny –返回流中的元素
流管道 :由一個源,隨后的零個或多個中間操作和一個終端操作組成。
分離器 –用于遍歷和分配源元素的分離器。 可以將其用于遍歷,估計元素數量或將其拆分為多個拆分器
歸約 –歸約運算(或折疊)采用一系列輸入元素,并通過重復應用組合運算將它們組合成單個匯總結果。 歸約運算可以是計算總和,最大值,最小值,計數或收集列表中的元素。 簡化操作也可以并行化,只要所使用的函數是關聯的且無狀態的即可。 用于減少的方法是reduce()
例如:使用和減少:
int sum = numbers.stream().reduce(0, (x,y) -> x + y);要么
int sum = numbers.stream().reduce(0, Integer::sum);可變歸約 –是一種在處理流中的元素時將輸入元素累積到可變結果容器(StringBuilder或Collection)中的操作。
例如:
String concatenated = strings.reduce("", String::concat)謂詞 –確定輸入對象是否符合某些條件的功能接口
我希望這個精簡的列表對您有所幫助,并且在您需要在一頁上使用所有這些術語的時候將其保留在書簽中。
如果您發現缺少的東西,請告訴我,以便糾正。
所以……我希望您有個不錯的降臨時間,并祝您生日快樂/快樂/快樂,但最重要的是,祝您圣誕節平安!
翻譯自: https://www.javacodegeeks.com/2013/12/a-conversational-guide-for-jdk8s-lambdas-a-glossary-of-terms.html
總結
以上是生活随笔為你收集整理的JDK8 lambda的会话指南–术语表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击自己电脑(ddos怎么攻击电
- 下一篇: linux命令压缩成zip(linux命