国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Java 8 中的 Stream ,可以讓你寫代碼事半功倍

這篇具有很好參考價(jià)值的文章主要介紹了使用 Java 8 中的 Stream ,可以讓你寫代碼事半功倍。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Stream

Java 8 中一個(gè)主要的新功能是引入了流(Stream)功能。在java.util.stream中包含用于處理元素序列的類。其中,最重要的類是Stream<T>。下面我們就來(lái)看看如何使用現(xiàn)有的數(shù)據(jù)源創(chuàng)建流。

創(chuàng)建Stream

可以使用 stream()of() 方法從不同的數(shù)據(jù)源(例如:集合、數(shù)組)創(chuàng)建流:

String[] arr = new String[]{"萬(wàn)", "貓", "學(xué)", "社"};
Stream<String> stream = Arrays.stream(arr);
stream = Stream.of("萬(wàn)", "貓", "學(xué)", "社");

Collection 接口新增了一個(gè) stream() 默認(rèn)方法,允許使用任何集合作為數(shù)據(jù)源來(lái)創(chuàng)建 Stream<T>

List<String> list = new ArrayList();
list.add("萬(wàn)");
list.add("貓");
list.add("學(xué)");
list.add("社");
Stream<String> stream = list.stream();

在多線程中使用Stream

Stream 還通過(guò)提供 parallelStream() 方法來(lái)簡(jiǎn)化多線程操作,該方法以并行模式運(yùn)行對(duì)流元素的操作。

下面的代碼可以對(duì)流的每個(gè)元素并行運(yùn)行 doWork() 方法:

List<String> list = new ArrayList();
list.add("萬(wàn)");
list.add("貓");
list.add("學(xué)");
list.add("社");
list.parallelStream().forEach(element -> doWork(element));

接下來(lái),我們將介紹一些基本的 Stream 操作。

Stream 操作

在流上可以執(zhí)行許多有用的操作。它們被分為中間操作(返回 Stream<T>)和終端操作(返回明確定義類型的結(jié)果),中間操作允許鏈接。

我需要注意的是,流上的操作不會(huì)改變數(shù)據(jù)源。

下面是一個(gè)簡(jiǎn)單的例子:

List<String> list = new ArrayList();
list.add("萬(wàn)");
list.add("貓");
list.add("學(xué)");
list.add("社");
long count = list.stream().distinct().count();

在上面的例子中,distinct() 方法表示一個(gè)中間操作,它創(chuàng)建了前一個(gè)流的唯一元素的新流。而 count() 方法是一個(gè)終端操作,它返回流的大小。

迭代

Stream 幫助我們替代了 for、for-each 和 while 循環(huán)。它可以讓我們把精力集中在操作的邏輯上,而不是在迭代元素序列上。

比如下面的代碼:

for (String string : list) {
    if (string.contains("貓")) {
        return true;
    }
}

這段代碼只需要一行 Stream 代碼就可以實(shí)現(xiàn):

boolean isExist = list.stream().anyMatch(element -> element.contains("貓"));

過(guò)濾

filter() 方法可以讓我們選擇滿足謂詞條件的元素流。

比如下面的代碼:

List<String> list = new ArrayList();
list.add("萬(wàn)");
list.add("貓");
list.add("學(xué)");
list.add("社");
Stream<String> stream = list.stream().filter(element -> element.contains("貓"));

在上面的例子中,創(chuàng)建了一個(gè) List<String>Stream<String>,查找該流中所有包含字符“貓”的元素,并創(chuàng)建一個(gè)只包含篩選后元素的新流。

映射

為了通過(guò)將特殊函數(shù)應(yīng)用于流元素來(lái)轉(zhuǎn)換它們,并將這些新元素收集到流中,我們可以使用 map() 方法。

比如下面的代碼:

List<String> list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
Stream<Integer> stream = list.stream().map(str -> Integer.valueOf(str));

在上面的例子中,通過(guò)對(duì)初始流的每個(gè)元素應(yīng)用特定的 lambda 表達(dá)式將 Stream<String> 轉(zhuǎn)換為 Stream<Integer>。

如果您有一個(gè)流,其中每個(gè)元素都包含其自己的元素序列,并且您想創(chuàng)建這些內(nèi)部元素的流,則應(yīng)使用 flatMap() 方法。

比如下面的代碼:

public class Writer {
	private String name;
	private List<String> books;
}
List<Writer> writers = new ArrayList<>();
writers.add(new Writer());
Stream<String> stream = writers.stream().flatMap(writer -> writer.getBooks().stream());

在上面的例子中,我們有一個(gè)類型為 Writer 的元素列表。Writer 類包含一個(gè)類型為 List<String> 的字段 books。使用 flatMap() 方法,字段 books 中的每個(gè)元素將被提取并添加到新的結(jié)果流中。之后,最開始的 Stream 將會(huì)丟失。

匹配

Stream 提供了一組方便的工具,根據(jù)一些謂詞驗(yàn)證一個(gè)序列的元素。我們可以使用以下方法之一:

  • anyMatch():只要有一個(gè)條件滿足即返回true
  • allMatch():必須全部都滿足才會(huì)返回true
  • noneMatch():全都不滿足才會(huì)返回true

它們都返回 boolean 的終端操作。

比如下面的代碼:

List<String> list = new ArrayList();
list.add("萬(wàn)");
list.add("貓");
list.add("學(xué)");
list.add("社");
list.stream().anyMatch(element -> element.contains("萬(wàn)")); // true
list.stream().allMatch(element -> element.contains("萬(wàn)")); // false
list.stream().noneMatch(element -> element.contains("萬(wàn)")); // false

對(duì)于空的 Stream,無(wú)論給定的謂詞是什么,allMatch() 方法都將返回 true:

Stream.empty().anyMatch(Objects::nonNull); // false

這是一個(gè)合理的值,因?yàn)槲覀冋也坏讲粷M足謂詞的任何元素。

同樣地,對(duì)于空的 Stream,anyMatch() 方法總是返回 false:

Stream.empty().anyMatch(Objects::nonNull); // false

同樣地,這也是合理的,因?yàn)槲覀冋也坏綕M足這個(gè)條件的元素。

合并

我可以使用類型為 Stream 的 reduce() 方法,根據(jù)指定的函數(shù)將一系列元素合并為某個(gè)值。這個(gè)方法有兩個(gè)參數(shù):第一個(gè)是起始值,第二個(gè)是累加器函數(shù)。

比如下面的代碼:

List<Integer> integers = Arrays.asList(1, 2, 3);
Integer reduced = integers.stream().reduce(4, (a, b) -> a + b);

在上面的例子中,有一個(gè) List<Integer>,我們將這些元素加起來(lái),并加上一個(gè)初始的整數(shù)(在這個(gè)例子中是4)。那么,運(yùn)行以下代碼的結(jié)果是10(4 + 1 + 2 + 3)。

收集

在 Stream 類型中,也可以通過(guò) collect() 方法來(lái)進(jìn)行收集。這個(gè)操作非常方便,可以將一個(gè)流轉(zhuǎn)換為 CollectionMap,也可以將一個(gè)流表示為單個(gè)字符串。Collectors 是一個(gè)實(shí)用類,提供了幾乎所有典型的收集操作的解決方案。對(duì)于一些不太常見(jiàn)的任務(wù),可以創(chuàng)建自定義的收集器。

下面的代碼使用終端操作 collect()Stream<String> 轉(zhuǎn)換為 List<String>。

List<String> resultList 
  = list.stream().map(element -> element.toUpperCase()).collect(Collectors.toList());

最后

Stream 的高級(jí)示例非常豐富,本文的目的是為了讓我們快速了解 Stream 功能的用法,并啟發(fā)我們繼續(xù)探索和深入學(xué)習(xí)。

Stream 是 Java 8 中非常強(qiáng)大和實(shí)用的 API,它為開發(fā)人員提供了一種更加簡(jiǎn)便的方式來(lái)處理數(shù)據(jù)。希望我們通過(guò)本文的介紹和示例,可以快速上手使用 Stream,并繼續(xù)深入學(xué)習(xí)和探索。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-441700.html

到了這里,關(guān)于使用 Java 8 中的 Stream ,可以讓你寫代碼事半功倍的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 快速操控鼠標(biāo)行為!Vue鼠標(biāo)按鍵修飾符讓你事半功倍

    快速操控鼠標(biāo)行為!Vue鼠標(biāo)按鍵修飾符讓你事半功倍

    ?? ????江城開朗的豌豆 :個(gè)人主頁(yè) ????個(gè)人專欄? :《 VUE 》?《 javaScript 》 ??? ?個(gè)人網(wǎng)站? :《 江城開朗的豌豆?? 》? ???生活的理想,就是為了理想的生活?! ????????歡迎來(lái)到前端入門之旅!這個(gè)專欄是為那些對(duì)Web開發(fā)感興趣、剛剛開始學(xué)習(xí)前端的讀者們打造

    2024年02月05日
    瀏覽(21)
  • Docker新手必讀:這幾個(gè)常用命令讓你工作效率事半功倍

    Docker是一種容器化技術(shù),它可以將應(yīng)用程序及其所有依賴項(xiàng)以及運(yùn)行時(shí)環(huán)境打包到一個(gè)可以部署和運(yùn)行的獨(dú)立的容器中。Docker容器是輕量級(jí)、可移植和具有可觀察性的,可以在不同的開發(fā)、測(cè)試和生產(chǎn)環(huán)境中進(jìn)行部署和運(yùn)行。 Docker的主要特點(diǎn)包括: 簡(jiǎn)化應(yīng)用程序開發(fā)和部署

    2024年02月03日
    瀏覽(26)
  • 30個(gè)極致實(shí)用的谷歌瀏覽器插件,讓你開發(fā)事半功倍

    30個(gè)極致實(shí)用的谷歌瀏覽器插件,讓你開發(fā)事半功倍

    瀏覽器是開發(fā)人員最強(qiáng)大的工具。99% 的人不會(huì) 100% 地利用他們的瀏覽器。這里有 30 個(gè)瀏覽器擴(kuò)展,如果你能合理充分利用將大大提升你的開發(fā)效率。 \\\"WhatFont\\\",是一款幫助用戶快速識(shí)別網(wǎng)頁(yè)中字體信息的工具。 當(dāng)你在瀏覽網(wǎng)頁(yè)時(shí),如果看到了一款你喜歡的字體,但不知道具

    2024年02月02日
    瀏覽(92)
  • 自媒體人ai寫作必備!9款高效工具讓你事半功倍! #AI寫作#經(jīng)驗(yàn)分享

    自媒體人ai寫作必備!9款高效工具讓你事半功倍! #AI寫作#經(jīng)驗(yàn)分享

    這些工具不僅可以快速生成高質(zhì)量的文本內(nèi)容,還可以根據(jù)用戶的需求進(jìn)行個(gè)性化定制。它們可以幫助我們節(jié)省大量的時(shí)間和精力,讓我們更加專注于創(chuàng)意和細(xì)節(jié)的打磨。本文將為大家詳細(xì)介紹幾個(gè)AI寫作工具,讓你在寫作領(lǐng)域更上一層樓。 1.飛鳥寫作 這是一個(gè)微信公眾號(hào)

    2024年04月29日
    瀏覽(30)
  • java中的stream基本使用

    Stream流把真正的函數(shù)式編程風(fēng)格引入到Java中,而且代碼特別簡(jiǎn)介。 1、獲取Stream流 2、中間方法 3、終結(jié)方法 Collection體系集合 使用默認(rèn)方法stream()生成流, default Stream stream() Map體系集合 把Map轉(zhuǎn)成Set集合,間接的生成流 數(shù)組 通過(guò)Arrays中的靜態(tài)方法stream生成流 同種數(shù)據(jù)類型的

    2024年02月15日
    瀏覽(27)
  • 使用Java8 Stream流中的Collectors.collectingAndThen()方法去重

    Collectors.collectingAndThen() 根據(jù)對(duì)象屬性進(jìn)行去重操作 Collectors.collectingAndThen()方法屬于java8 Stream流中的 java.util.stream.Collectors ,此類實(shí)現(xiàn)了 java.util.stream.Collector 接口,還提供了大量的方法對(duì)Stream流中的元素進(jìn)行 map 和 reduce 操作 在獲取任務(wù)的時(shí)候,會(huì)出現(xiàn)id重復(fù)的狀況,利用 Co

    2024年02月09日
    瀏覽(103)
  • 【工具使用】AI幫你寫代碼

    【工具使用】AI幫你寫代碼

    先說(shuō)結(jié)論:該插件目前并不能完全取代程序員,正如他的名字Copilot,譯為副駕駛。但在簡(jiǎn)單業(yè)務(wù)方面有著無(wú)與倫比的能力! 官方地址 傳送門(點(diǎn)我) Copilot目前不提供公開使用,需要注冊(cè)賬號(hào)通過(guò)審核 GitHub Copilot 是一款 AI 結(jié)對(duì)程序員,可幫助您更快地編寫代碼并減少工作量

    2024年02月10日
    瀏覽(21)
  • JAVA 使用stream流將List中的對(duì)象某一屬性創(chuàng)建新的List

    Java Stream是Java 8引入的一種新機(jī)制,它可以讓我們以聲明式方式操作集合數(shù)據(jù),提供了更加簡(jiǎn)潔、優(yōu)雅的集合處理方式。Stream是一個(gè)來(lái)自數(shù)據(jù)源的元素隊(duì)列,并支持聚合操作。它的特點(diǎn)有: Stream 不會(huì)修改原始數(shù)據(jù)源。 Stream 操作是延遲執(zhí)行的。 Stream 操作可以是無(wú)限的(比如

    2024年02月03日
    瀏覽(93)
  • Collections工具類,可以使用collections工具類對(duì)代碼中的list進(jìn)行分組

    當(dāng)我們需要對(duì)代碼list進(jìn)行分組的時(shí)候,有時(shí)候使用for循環(huán)會(huì)顯得很蠢,那么使用Colletions工具類就會(huì)很方便,根據(jù)所需要的分類值,進(jìn)行映射分組集合,以上是案例 toMap 返回map集合?MapLong, ListLong toList 返回list集合 tips stream流一樣好用

    2024年03月23日
    瀏覽(20)
  • 一分鐘學(xué)會(huì)怎么讓chatGPT幫你寫python代碼(含使用地址)

    一分鐘學(xué)會(huì)怎么讓chatGPT幫你寫python代碼(含使用地址)

    1、給定角色定位 2、提出要求 3、提出要求的細(xì)節(jié) 效果還是不錯(cuò)的,界面也還可以,簡(jiǎn)單的加減乘除運(yùn)算都沒(méi)有問(wèn)題 1.現(xiàn)在加入就送內(nèi)含5-18美元的 ChatGPT 開發(fā)者賬號(hào) 2.外面賣888元的ChatGPT系列課程星球內(nèi)免費(fèi)看 3.不用魔法,直接使用 ChatGPT 4.大量 ChatGPT 相關(guān)帖子學(xué)習(xí) 5.可以曬自

    2024年02月02日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包