日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

javarandom函數(shù)用法 java隨機(jī)函數(shù)怎么寫

當(dāng) Java SE 8(又名核心 Java 8)在 2014 年被推出時(shí),它引入了一些更改,從根本上影響了用它進(jìn)行的編程 。這些更改中有兩個(gè)緊密相連的部分:流 API 和函數(shù)式編程構(gòu)造 。本文使用代碼示例,從基礎(chǔ)到高級(jí)特性,介紹每個(gè)部分并說(shuō)明它們之間的相互作用 。
基礎(chǔ)特性流 API 是在數(shù)據(jù)序列中迭代元素的簡(jiǎn)潔而高級(jí)的方法 。包 java.util.stream 和 java.util.function 包含了用于流 API 和相關(guān)函數(shù)式編程構(gòu)造的新庫(kù) 。當(dāng)然,代碼示例勝過(guò)千言萬(wàn)語(yǔ) 。
下面的代碼段用大約 2,000 個(gè)隨機(jī)整數(shù)值填充了一個(gè) List:
Random rand = new Random2();List<Integer> list = new ArrayList<Integer>();           // 空 listfor (int i = 0; i < 2048; i++) list.add(rand.nextInt()); // 填充它另外用一個(gè) for 循環(huán)可用于遍歷填充列表,以將偶數(shù)值收集到另一個(gè)列表中 。
流 API 提供了一種更簡(jiǎn)潔的方法來(lái)執(zhí)行此操作:
List <Integer> evens = list    .stream()                      // 流化 list    .filter(n -> (n & 0x1) == 0)   // 過(guò)濾出奇數(shù)值    .collect(Collectors.toList()); // 收集偶數(shù)值這個(gè)例子有三個(gè)來(lái)自流 API 的函數(shù):

  • stream 函數(shù)可以將集合轉(zhuǎn)換為流,而流是一個(gè)每次可訪問(wèn)一個(gè)值的傳送帶 。流化是惰性的(因此也是高效的),因?yàn)橹凳歉鶕?jù)需要產(chǎn)生的,而不是一次性產(chǎn)生的 。
  • filter 函數(shù)確定哪些流的值(如果有的話)通過(guò)了處理管道中的下一個(gè)階段,即 collect 階段 。filter 函數(shù)是 高階的(higher-order),因?yàn)樗膮?shù)是一個(gè)函數(shù) —— 在這個(gè)例子中是一個(gè) lambda 表達(dá)式,它是一個(gè)未命名的函數(shù),并且是 Java 新的函數(shù)式編程結(jié)構(gòu)的核心 。
lambda 語(yǔ)法與傳統(tǒng)的 Java 完全不同:
n -> (n & 0x1) == 0箭頭(一個(gè)減號(hào)后面緊跟著一個(gè)大于號(hào))將左邊的參數(shù)列表與右邊的函數(shù)體分隔開(kāi) 。參數(shù) n 雖未明確類型,但也可以明確 。在任何情況下,編譯器都會(huì)發(fā)現(xiàn) n 是個(gè) Integer 。如果有多個(gè)參數(shù),這些參數(shù)將被括在括號(hào)中,并用逗號(hào)分隔 。
在本例中,函數(shù)體檢查一個(gè)整數(shù)的最低位(最右)是否為零,這用來(lái)表示偶數(shù) 。過(guò)濾器應(yīng)返回一個(gè)布爾值 。盡管可以,但該函數(shù)的主體中沒(méi)有顯式的 return 。如果主體沒(méi)有顯式的 return,則主體的最后一個(gè)表達(dá)式即是返回值 。在這個(gè)例子中,主體按照 lambda 編程的思想編寫,由一個(gè)簡(jiǎn)單的布爾表達(dá)式 (n & 0x1) == 0 組成 。
  • collect 函數(shù)將偶數(shù)值收集到引用為 evens 的列表中 。如下例所示,collect 函數(shù)是線程安全的,因此,即使在多個(gè)線程之間共享了過(guò)濾操作,該函數(shù)也可以正常工作 。
方便的功能和輕松實(shí)現(xiàn)多線程在生產(chǎn)環(huán)境中,數(shù)據(jù)流的源可能是文件或網(wǎng)絡(luò)連接 。為了學(xué)習(xí)流 API, Java 提供了諸如 IntStream 這樣的類型,它可以用各種類型的元素生成流 。這里有一個(gè) IntStream 的例子:
IntStream                          // 整型流    .range(1, 2048)                // 生成此范圍內(nèi)的整型流    .parallel()                    // 為多個(gè)線程分區(qū)數(shù)據(jù)    .filter(i -> ((i & 0x1) > 0))  // 奇偶校驗(yàn) - 只允許奇數(shù)通過(guò)    .forEach(System.out::println); // 打印每個(gè)值

推薦閱讀