詳解java8中的Stream數(shù)據(jù)流
Stream是java8引入的一個(gè)重度使用lambda表達(dá)式的API。Stream使用一種類似用SQL語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對Java集合運(yùn)算和表達(dá)的高階抽象。直觀意味著開發(fā)者在寫代碼時(shí)只需關(guān)注他們想要的結(jié)果是什么而無需關(guān)注實(shí)現(xiàn)結(jié)果的具體方式。這一章節(jié)中,我們將介紹為什么我們需要一種新的數(shù)據(jù)處理API、Collection和Stream的不同之處以及如何將StreamAPI應(yīng)用到我們的編碼中。
篩選重復(fù)的元素
Stream 接口支持 distinct 的方法, 它會返回一個(gè)元素(根據(jù)流所生成元素的 hashCode和equals方法實(shí)現(xiàn))的流。
例如,以下代碼會篩選出列表中所有的偶數(shù),并確保沒有 重復(fù)。
List<Dish> dishes = Dish.menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList());
跳過指定數(shù)量的元素
Stream 支持 skip(n) 方法,返回一個(gè)扔掉了前n個(gè)元素的流。如果流中元素不足n個(gè),則返回一 個(gè)空流。limit(n) 和 skip(n) 是互補(bǔ)的
List<Dish> dishSkip = Dish.menu.stream().filter(d -> d.getCalories() > 300).skip(2) //去掉符合要求的集合中的前2個(gè)元素后返回 .collect(Collectors.toList()); dishSkip.forEach(System.out::println);
map 操作
Stream 支持 map 方法,它會接受一個(gè)函數(shù)作為參數(shù)。這個(gè)函數(shù)會被應(yīng)用到每個(gè)元素上,并將其映 射成一個(gè)新的元素
List<String> list = st.skip(0).limit(2).map(s->s.toUpperCase()).collect(Collectors.toList());
元素求和
List<Integer> numbers = Arrays.asList(3,4,5,1,2); int sum1 = numbers.stream().reduce(0,(a, b) -> a + b); System.out.println(sum1); int sum2 = numbers.stream().reduce(0,Integer::sum); System.out.println(sum2);
最大值
int max = numbers.stream().reduce(0,Integer::max); System.out.println(max);
最小值
//reduce不接受初始值,返回一個(gè)Optional對象(考慮流中沒有任何元素的情況) Optional<Integer> min = numbers.stream().reduce(Integer::min); min.ifPresent(System.out::println);
總結(jié)
以上所述是小編給大家介紹的java8中的Stream數(shù)據(jù)流,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Springboot如何通過yml配置文件為靜態(tài)成員變量賦值
這篇文章主要介紹了Springboot如何通過yml配置文件為靜態(tài)成員變量賦值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java實(shí)現(xiàn)一個(gè)達(dá)達(dá)租車系統(tǒng)的步驟詳解
這篇文章主要給大家介紹了利用Java實(shí)現(xiàn)一個(gè)達(dá)達(dá)租車系統(tǒng)的步驟,文中給出了詳細(xì)的實(shí)現(xiàn)思路和示例代碼,并在文末給出了完整的源碼供大家學(xué)習(xí)下載,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
淺析springboot通過面向接口編程對控制反轉(zhuǎn)IOC的理解
這篇文章主要介紹了springboot通過面向接口編程對控制反轉(zhuǎn)IOC的理解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-08-08
java多線程學(xué)習(xí)之死鎖的模擬和避免(實(shí)例講解)
下面小編就為大家?guī)硪黄猨ava多線程學(xué)習(xí)之死鎖的模擬和避免(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Spring Boot+Nginx實(shí)現(xiàn)大文件下載功能
相信很多小伙伴,在日常開放中都會遇到大文件下載的情況,大文件下載方式也有很多,比如非常流行的分片下載、斷點(diǎn)下載;當(dāng)然也可以結(jié)合Nginx來實(shí)現(xiàn)大文件下載,在中小項(xiàng)目非常適合使用,這篇文章主要介紹了Spring Boot結(jié)合Nginx實(shí)現(xiàn)大文件下載,需要的朋友可以參考下2024-05-05
Spring?Boot?如何通過ServletRequestHandledEvent事件實(shí)現(xiàn)接口請求的性能監(jiān)控
在Spring框架中,監(jiān)控接口請求的性能可以通過ServletRequestHandledEvent事件實(shí)現(xiàn),這篇文章給大家介紹Spring?Boot?如何通過ServletRequestHandledEvent事件實(shí)現(xiàn)接口請求的性能監(jiān)控,感興趣的朋友跟隨小編一起看看吧2024-08-08
SpringBoot整合RestTemplate用法的實(shí)現(xiàn)
本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

