java中l(wèi)ist.forEach()和list.stream().forEach()區(qū)別
首先,它們的功能都是遍歷數(shù)組每個(gè)元素并執(zhí)行入?yún)⒌腶ccept()方法,但是它們的實(shí)現(xiàn)方式卻不一樣,在一些特定的情況下,執(zhí)行會(huì)出現(xiàn)不同的結(jié)果。
在大多數(shù)情況下,兩者都會(huì)產(chǎn)生相同的結(jié)果,但是,我們會(huì)看到一些微妙的差異。
概述
首先,創(chuàng)建一個(gè)迭代列表:
List<String> list = Arrays.asList("A","B","C","D");
最直接的方法是使用增強(qiáng)的for循環(huán):
for(String s : list"){
//something
}
如果我們想使用函數(shù)式Java,我們也可以使用forEach()。我們可以直接在集合上這樣做:
Consumer<String> consumer = s -> {System.out::println};
list.forEach(consumer);
或者,我們可以在集合的流上調(diào)用forEach():
list.stream().forEach(consumer);
兩個(gè)版本都將迭代列表并打印所有元素:
ABCD ABCD
在這個(gè)簡(jiǎn)單的例子中,我們使用的forEach()沒(méi)有區(qū)別。
區(qū)別
list.forEach()使用增強(qiáng)for循環(huán)
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
list.stream().forEach(): 它首先將集合轉(zhuǎn)換為流,然后對(duì)集合的流進(jìn)行迭代
當(dāng)一邊遍歷一邊刪除的時(shí)候,forEach能夠快速失敗,而stream().forEach()只有等到數(shù)組遍歷完之后才會(huì)拋異常
public class DeleteDifference {
? ?public static void main(String[] args) {
? ? ? ?List<String> list = Arrays.asList("A", "B", "C", "D");
? ? ? ?try {
? ? ? ? ? ?list.forEach(item -> {
? ? ? ? ? ? ? ?System.out.println(item);
? ? ? ? ? ? ? ?list.remove(0);
? ? ? ? ? ?});
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?list.stream().forEach(item -> {
? ? ? ? ? ?System.out.println(item);
? ? ? ? ? ?list.remove(0);?
? ? ? ?});
? ?}
}到此這篇關(guān)于java中l(wèi)ist.forEach()和list.stream().forEach()區(qū)別的文章就介紹到這了,更多相關(guān)list.forEach()和list.stream().forEach()區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot注解@Import原理之關(guān)于ConfigurationClassPostProcessor源碼解析
這篇文章主要介紹了SpringBoot注解@Import原理之關(guān)于ConfigurationClassPostProcessor源碼解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Springboot實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel的方法
今天帶各位小伙伴學(xué)習(xí)Springboot實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel的方法,文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Java8中stream流的collectingAndThen方法應(yīng)用實(shí)例詳解
Java8中的Stream流提供了collectingAndThen方法,用于對(duì)歸納結(jié)果進(jìn)行二次處理,文章通過(guò)User類的數(shù)據(jù)填充,演示了如何使用該方法進(jìn)行集合去重、查找最高工資員工、計(jì)算平均工資等操作,感興趣的朋友跟隨小編一起看看吧2025-03-03
通過(guò)Java測(cè)試幾種壓縮算法的性能(附測(cè)試代碼下載)
這篇文章主要介紹了通過(guò)Java測(cè)試幾種壓縮算法的實(shí)際性能的一個(gè)實(shí)驗(yàn),包括Java自帶的deflate與GZIP壓縮方式,還是有一定借鑒意義的,需要的朋友可以參考下2015-12-12
Spring Boot全局異常處理保姆級(jí)教程從入門到實(shí)戰(zhàn)(看完秒懂)
本文講解SpringBoot全局異常處理,通過(guò)@RestControllerAdvice集中處理異常,統(tǒng)一響應(yīng)格式,提升代碼簡(jiǎn)潔性與安全性,涵蓋業(yè)務(wù)異常、參數(shù)校驗(yàn)及系統(tǒng)異常處理,避免敏感信息泄露,并提供日志記錄與狀態(tài)碼自定義等進(jìn)階技巧,感興趣的朋友跟隨小編一起看看吧2025-06-06
SpringBoot整合Redis的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot整合Redis的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

