javarandom函數用法 java隨機函數怎么寫


當 Java SE 8(又名核心 Java 8)在 2014 年被推出時,它引入了一些更改,從根本上影響了用它進行的編程 。這些更改中有兩個緊密相連的部分:流 API 和函數式編程構造 。本文使用代碼示例,從基礎到高級特性,介紹每個部分并說明它們之間的相互作用 。
基礎特性 流 API 是在數據序列中迭代元素的簡潔而高級的方法 。包 java.util.stream 和 java.util.function 包含了用于流 API 和相關函數式編程構造的新庫 。當然,代碼示例勝過千言萬語 。
下面的代碼段用大約 2,000 個隨機整數值填充了一個 List:
Random rand = new Random2();List list = new ArrayList();// 空 listfor (int i = 0; i < 2048; i) list.add(rand.nextInt()); // 填充它 另外用一個 for 循環可用于遍歷填充列表,以將偶數值收集到另一個列表中 。
流 API 提供了一種更簡潔的方法來執行此操作:
List evens = list.stream()// 流化 list.filter(n -> (n & 0x1) == 0)// 過濾出奇數值.collect(Collectors.toList()); // 收集偶數值 這個例子有三個來自流 API 的函數:
stream 函數可以將集合轉換為流,而流是一個每次可訪問一個值的傳送帶 。流化是惰性的(因此也是高效的),因為值是根據需要產生的,而不是一次性產生的 。filter 函數確定哪些流的值(如果有的話)通過了處理管道中的下一個階段,即 collect 階段 。filter 函數是 高階的(higher-order),因為它的參數是一個函數 —— 在這個例子中是一個 lambda 表達式,它是一個未命名的函數,并且是 Java 新的函數式編程結構的核心 。lambda 語法與傳統的 Java 完全不同:
n -> (n & 0x1) == 0 箭頭(一個減號后面緊跟著一個大于號)將左邊的參數列表與右邊的函數體分隔開 。參數 n 雖未明確類型,但也可以明確 。在任何情況下,編譯器都會發現 n 是個 Integer 。如果有多個參數,這些參數將被括在括號中,并用逗號分隔 。
在本例中,函數體檢查一個整數的最低位(最右)是否為零,這用來表示偶數 。過濾器應返回一個布爾值 。盡管可以,但該函數的主體中沒有顯式的 return 。如果主體沒有顯式的 return,則主體的最后一個表達式即是返回值 。在這個例子中,主體按照 lambda 編程的思想編寫,由一個簡單的布爾表達式 (n & 0x1) == 0 組成 。
collect 函數將偶數值收集到引用為 evens 的列表中 。如下例所示,collect 函數是線程安全的,因此,即使在多個線程之間共享了過濾操作,該函數也可以正常工作 。方便的功能和輕松實現多線程 在生產環境中,數據流的源可能是文件或網絡連接 。為了學習流 API, Java 提供了諸如 IntStream 這樣的類型,它可以用各種類型的元素生成流 。這里有一個 IntStream 的例子:

猜你喜歡