Java 流的工作原理示例

理解 Java 流的最佳方式是將其想象為一個對象列表,這些對象彼此獨立,一次一個地進入管道。開發者可以控制進入管道的對象數量、在管道內對它們執行的操作以及它們離開管道后的處理方式。

我們可以通過 .stream() 方法從集合中獲取流。例如,假設我們有一個語言下拉列表,并希望使用 For 循環或 Stream API 打印該列表。


流 API 方法的使用

獲取流并打印元素

通過調用集合上的 .stream() 方法,我們可以獲取流。獲取流后,可以調用 [forEach](http://m.dlbhg.com/blog/the-benefits-of-the-collection-api-in-java-8-part-1)() 方法,并傳遞一個操作來處理每個元素。例如,使用 System.out.println 方法打印每個元素的值。

List languages = new ArrayList();
languages.add("Java");
languages.add("Python");
languages.add("JavaScript");

languages.stream().forEach(System.out::println);

使用 filter() 方法過濾流

filter() 方法用于根據特定條件過濾流中的元素。例如,我們可以過濾出以 "E" 開頭的語言:

languages.stream()
         .filter(item -> item.startsWith("E"))
         .forEach(System.out::println);

在這里,filter() 方法接收一個謂詞(Predicate)作為參數,該謂詞是一個返回布爾值的函數式接口。

使用 sort() 方法排序流

sort() 方法可以對流中的元素進行排序。例如,按字母順序對語言列表進行排序:

languages.stream()
         .sorted()
         .forEach(System.out::println);

使用 map() 方法映射元素

map() 方法將流中的元素映射為另一個對象。例如,將語言列表中的所有元素轉換為大寫:

languages.stream()
         .map(String::toUpperCase)
         .forEach(System.out::println);

使用 collect() 方法收集結果

collect() 方法可以將流中的元素收集到一個集合中。例如,創建一個新的大寫語言列表:

List upperCaseLanguages = languages.stream()
                                           .map(String::toUpperCase)
                                           .collect(Collectors.toList());

System.out.println(upperCaseLanguages);

使用 min() 和 max() 方法查找最值

min()max() 方法可以用來查找流中的最小值和最大值。例如,從數字流中獲取最大值:

Optional maxNumber = Stream.of(1, 2, 3, 4, 5)
                                    .max(Comparator.comparing(Integer::valueOf));

maxNumber.ifPresent(System.out::println);

使用 count() 方法統計元素數量

count() 方法可以返回流中元素的數量。例如,統計以 "G" 開頭的語言數量:

long count = languages.stream()
                      .filter(item -> item.startsWith("G"))
                      .count();

System.out.println(count);

在 Selenium WebDriver 中使用 Stream API

示例 1:過濾和計數 Web 元素

以下代碼展示了如何使用 Stream API 過濾和計數 Web 元素:

List links = driver.findElements(By.tagName("a"));

long brokenLinksCount = links.stream()
                             .filter(link -> link.getAttribute("href") == null)
                             .count();System.out.println("斷開的鏈接數量:" + brokenLinksCount);

示例 2:按排序順序顯示產品

以下代碼展示了如何使用 Stream API 和 XPath 獲取按排序順序顯示的產品標題:

List productItems = driver.findElements(By.xpath("http://h2[@class='product-title']"));

productItems.stream()
            .map(WebElement::getText)
            .sorted()
            .forEach(System.out::println);

流 API 的優勢

  1. 操作流水線:Stream API 通過操作流水線從源(如數據結構、數組、生成器函數或 I/O 通道)傳遞元素。
  2. 函數式編程:流操作是函數式的,操作結果不會修改源數據。例如,過濾操作會生成一個新的流,而不會影響原始集合。
  3. 一次性消費:流中的元素只能被訪問一次。如果需要重新訪問相同的源元素,則必須創建一個新流。

結論

本文介紹了 Java Stream API 的基本用法及其在 Selenium WebDriver 中的應用。通過結合 Lambda 表達式和 Stream API,可以以函數式編程的方式編寫代碼,從而提高代碼的可讀性和簡潔性。此外,Stream API 在處理 Web 元素列表時非常高效,能夠輕松實現數據的過濾、排序和收集。

原文鏈接: https://www.jadeglobal.com/blog/introduction-java-eight-stream-api
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
返回頂部
上一篇
如何編寫Go API:終極指南 - Jonny Langefeld
下一篇
介紹全新的Rust REST API客戶端庫
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
久久久欧美精品sm网站| 波多野结衣一区二区三区| 日韩av中文字幕一区二区| 国产毛片一区二区| 在线免费一区三区| 亚洲人成伊人成综合网小说| 欧美一区二区三区四区久久| 青青草国产成人av片免费| 国产精品亚洲第一| 一卡二卡三卡日韩欧美| 欧美日韩视频一区二区| 日韩国产欧美在线视频| 亚洲精品在线网站| 成人性生交大片免费看视频在线 | 色呦呦一区二区三区| 成人欧美一区二区三区白人| 欧洲在线/亚洲| 精久久久久久久久久久| 亚洲精品你懂的| 这里是久久伊人| 成人免费电影视频| 香蕉加勒比综合久久| 久久久国产综合精品女国产盗摄| 色婷婷综合五月| 久久av中文字幕片| 亚洲综合成人在线视频| 精品国产一区二区亚洲人成毛片 | 免费成人在线观看视频| 精品欧美一区二区久久| 色噜噜狠狠一区二区三区果冻| 青青草原综合久久大伊人精品 | 欧美日韩国产一级片| 国产成人午夜电影网| 日韩激情一二三区| 亚洲综合一区二区三区| 中文字幕国产一区| 欧美大片拔萝卜| 欧美美女bb生活片| 99久久国产综合精品色伊| 精品在线播放免费| 久久机这里只有精品| 亚洲成人av中文| 亚洲欧美另类在线| 国产欧美精品一区| xvideos.蜜桃一区二区| 欧美一级二级三级蜜桃| 91精品欧美综合在线观看最新| 日本福利一区二区| 色哟哟国产精品| 色综合久久精品| 在线影院国内精品| 色国产精品一区在线观看| 色婷婷精品大在线视频| 欧美亚洲一区三区| 欧美私模裸体表演在线观看| 在线亚洲人成电影网站色www| 97se亚洲国产综合自在线不卡| 成人小视频免费在线观看| 成人激情动漫在线观看| 91小宝寻花一区二区三区| 91在线视频免费91| 在线观看亚洲一区| 欧美日韩国产123区| 制服视频三区第一页精品| 日韩一区二区免费视频| 精品国产伦理网| 国产精品国产三级国产| 亚洲国产一区二区a毛片| 日本人妖一区二区| 国产精品一区二区三区网站| 成人av片在线观看| 在线观看免费亚洲| 555夜色666亚洲国产免| 国产亚洲精品资源在线26u| 亚洲美女视频在线| 久久er精品视频| 91原创在线视频| 日韩三级高清在线| 亚洲欧美一区二区不卡| 三级在线观看一区二区| 成人av动漫在线| 欧美一级日韩免费不卡| 国产精品久久久一本精品 | 精品一区二区三区av| caoporn国产一区二区| 88在线观看91蜜桃国自产| 国产精品久久久久影院老司| 日韩av成人高清| 91免费看视频| 久久综合久久综合亚洲| 午夜精品福利一区二区三区蜜桃| 成人午夜精品在线| 精品乱人伦小说| 日本不卡不码高清免费观看 | 成人激情免费网站| 日韩一区二区麻豆国产| 一区二区三区四区激情| 国产成人av一区| 久久久美女毛片| 精品一区二区三区视频在线观看| 在线观看一区二区视频| 日韩一区日韩二区| a4yy欧美一区二区三区| 国产亚洲欧美一区在线观看| 麻豆精品视频在线观看免费| 欧美精品在欧美一区二区少妇| 亚洲人吸女人奶水| 丰满亚洲少妇av| 日本一区二区三区在线观看| 久草热8精品视频在线观看| 7777精品伊人久久久大香线蕉最新版 | 在线观看91精品国产入口| 一区二区视频在线| 91年精品国产| 亚洲国产精品精华液网站| 欧美伊人久久大香线蕉综合69| 一区二区在线免费| 欧美日韩精品一区二区在线播放| 亚洲一区二区欧美日韩| 欧美高清www午色夜在线视频| 日产精品久久久久久久性色| 日韩午夜三级在线| 国产高清精品网站| 亚洲免费在线视频一区 二区| 色爱区综合激月婷婷| 亚洲地区一二三色| 日韩欧美国产综合一区 | 精品综合久久久久久8888| 久久天堂av综合合色蜜桃网| 成人美女视频在线看| 亚洲蜜臀av乱码久久精品| 欧美年轻男男videosbes| 久久精品999| 亚洲人成精品久久久久| 欧美一级一区二区| 97久久超碰国产精品电影| 日本一区中文字幕| 国产精品网站导航| 7777精品伊人久久久大香线蕉经典版下载 | 日韩在线一二三区| 国产午夜亚洲精品午夜鲁丝片| 中文字幕日本乱码精品影院| 国产综合色视频| 中文字幕一区视频| 欧美精品vⅰdeose4hd| 国产成人精品免费视频网站| 亚洲影院在线观看| 日本一区二区视频在线| 91精品国产综合久久香蕉的特点| 成人毛片老司机大片| 麻豆精品久久精品色综合| 一区二区三区在线看| 中文字幕欧美日韩一区| 精品福利一二区| 欧美精品一二三| 97se亚洲国产综合自在线不卡| 久久精品99国产精品| 亚洲成人动漫在线观看| 一区二区三区中文字幕电影| 欧美韩日一区二区三区四区| 日韩欧美在线观看一区二区三区| 日本高清不卡在线观看| 99精品视频在线观看| 精久久久久久久久久久| 日本强好片久久久久久aaa| 亚洲精品成人天堂一二三| 国产精品素人一区二区| 国产亚洲欧美一区在线观看| 久久日韩粉嫩一区二区三区| 日韩精品中文字幕一区二区三区 | 亚洲第一会所有码转帖| 一区二区三区四区在线| 亚洲欧美日韩一区| 亚洲欧美日韩小说| 自拍av一区二区三区| 亚洲日本护士毛茸茸| 一区二区三区中文字幕| 五月天精品一区二区三区| 天天综合网天天综合色| 麻豆视频一区二区| 国内偷窥港台综合视频在线播放| 精品一区二区三区香蕉蜜桃 | 蜜臀av一级做a爰片久久| 久久99国产精品免费| 国产高清成人在线| 一本一道久久a久久精品| 91福利在线观看| 欧美一卡二卡在线| 欧美大片免费久久精品三p| 国产日韩欧美一区二区三区综合| 国产精品污网站| 亚洲国产精品欧美一二99| 激情综合色丁香一区二区| 不卡视频一二三四| 欧美精品aⅴ在线视频| 国产欧美一区二区三区在线看蜜臀 | 日本一区二区三区dvd视频在线| 亚洲日本一区二区| 九九九精品视频| 欧美日韩国产不卡|