摘要:前置數(shù)據(jù)提取對(duì)象中的一列提取列第一種寫法簡(jiǎn)單一點(diǎn)的寫法通過(guò)字段中條件過(guò)濾集合列表只要年紀(jì)大于歲的人列表中對(duì)象數(shù)值型列數(shù)據(jù)求和求和全部年紀(jì)取出集合符合條件的第一個(gè)元素取出年紀(jì)為歲的人簡(jiǎn)寫對(duì)集合中對(duì)象
0x00. 前置數(shù)據(jù)
private List0x01. 提取對(duì)象中的一列peoples = null; @BeforeEach void before () { peoples = new ArrayList<>(); peoples.add(new People("K.O1", 21, new Date())); peoples.add(new People("K.O3", 23, new Date())); peoples.add(new People("K.O4", 24, new Date())); peoples.add(new People("K.O5", 25, new Date())); peoples.add(new People("K.O2", 22, new Date())); peoples.add(new People("K.O6", 26, new Date())); }
/** * 提取1列 */ @Test void whenExtractColumnSuccess () { //第一種寫法 Listages1 = peoples.stream().map(people -> people.getAge()).collect(Collectors.toList()); System.out.println("###println: args1----"); ages1.forEach(System.out::println); //簡(jiǎn)單一點(diǎn)的寫法 List ages2 = peoples.stream().map(People::getAge).collect(Collectors.toList()); System.out.println("###println: args2----"); ages1.forEach(System.out::println); }
###println: args1---- 21 22 23 24 25 26 ###println: args2---- 21 22 23 24 25 260x02. 通過(guò)字段中條件過(guò)濾集合列表
/** * 只要年紀(jì)大于25歲的人 */ @Test void whenFilterAgeGT25Success () { Listpeoples1 = peoples.stream().filter(x -> x.getAge() > 25).collect(Collectors.toList()); peoples1.forEach(x -> System.out.println(x.toString())); }
People{name="K.O6", age=26, birthday=Wed May 15 22:20:22 CST 2019}0x03. 列表中對(duì)象數(shù)值型列數(shù)據(jù)求和
/** * 求和全部年紀(jì) */ @Test void sumAllPeopleAgeSuccess () { Integer sum1 = peoples.stream().collect(Collectors.summingInt(People::getAge)); System.out.println("###sum1: " + sum1); Integer sum2 = peoples.stream().mapToInt(People::getAge).sum(); System.out.println("###sum2: " + sum2); }
###sum1: 141 ###sum2: 1410x04. 取出集合符合條件的第一個(gè)元素
/** * 取出年紀(jì)為25歲的人 */ @Test void extractAgeEQ25Success () { OptionaloptionalPeople = peoples.stream().filter(x -> x.getAge() == 25).findFirst(); if (optionalPeople.isPresent()) System.out.println("###name1: " + optionalPeople.get().getName()); //簡(jiǎn)寫 peoples.stream().filter(x -> x.getAge() == 25).findFirst().ifPresent(x -> System.out.println("###name2: " + x.getName())); }
###name1: K.O5 ###name2: K.O50x05. 對(duì)集合中對(duì)象字符列按規(guī)則拼接
/** * 逗號(hào)拼接全部名字 */ @Test void printAllNameSuccess () { String names = peoples.stream().map(People::getName).collect(Collectors.joining(",")); System.out.println(names); }
K.O1,K.O2,K.O3,K.O4,K.O5,K.O60x06. 將集合元素提取,轉(zhuǎn)為Map
/** * 將集合轉(zhuǎn)成(name, age) 的map */ @Test void list2MapSuccess () { Mapmap1 = peoples.stream().collect(Collectors.toMap(People::getName, People::getAge)); map1.forEach((k, v) -> System.out.println(k + ":" + v)); System.out.println("--------"); //(name object) Map map2 = peoples.stream().collect(Collectors.toMap(People::getName, People::getThis)); map2.forEach((k, v) -> System.out.println(k + ":" + v.toString())); } //People中自己實(shí)現(xiàn)的方法 public People getThis () { return this; }
K.O2:22 K.O3:23 K.O1:21 K.O6:26 K.O4:24 K.O5:25 -------- K.O2:People{name="K.O2", age=22, birthday=Wed May 15 22:42:39 CST 2019} K.O3:People{name="K.O3", age=23, birthday=Wed May 15 22:42:39 CST 2019} K.O1:People{name="K.O1", age=21, birthday=Wed May 15 22:42:39 CST 2019} K.O6:People{name="K.O6", age=26, birthday=Wed May 15 22:42:39 CST 2019} K.O4:People{name="K.O4", age=24, birthday=Wed May 15 22:42:39 CST 2019} K.O5:People{name="K.O5", age=25, birthday=Wed May 15 22:42:39 CST 2019}0x07. 按集合某一屬性進(jìn)行分組
/** * 按名字分組 */ @Test void listGroupByNameSuccess() { //添加一個(gè)元素方便看效果 peoples.add(new People("K.O1", 29, new Date())); Map> map = peoples.stream().collect(Collectors.groupingBy(People::getName)); map.forEach((k, v) -> System.out.println(k + ":" + v.size())); }
K.O2:1 K.O3:1 K.O1:2 K.O6:1 K.O4:1 K.O5:10x08. 求集合對(duì)象數(shù)值列平均數(shù)
/** * 求人平均年齡 */ @Test void averagingAgeSuccess () { Double avgAge = peoples.stream().collect(Collectors.averagingInt(People::getAge)); System.out.println(avgAge); }
23.50x09. 對(duì)集合按某一列排序
/** * 按年齡排序 */ @Test void sortByAgeSuccess () { System.out.println("###排序前---"); peoples.forEach(x -> System.out.println(x.getAge())); peoples.sort((x, y) -> { if (x.getAge() > y.getAge()) { return 1; } else if (x.getAge() == y.getAge()) { return 0; } return -1; }); System.out.println("###排序后---"); peoples.forEach(x -> System.out.println(x.getAge())); }
###排序前--- 21 23 24 25 22 26 ###排序后--- 21 22 23 24 25 26未完待續(xù)
<源碼地址:https://github.com/cos2a/learning-repo/tree/master/core-java8>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77700.html
摘要:串行與并行可以分為串行與并行兩種,串行流和并行流差別就是單線程和多線程的執(zhí)行。返回串行流返回并行流和方法返回的都是類型的對(duì)象,說(shuō)明它們?cè)诠δ艿氖褂蒙鲜菦](méi)差別的。唯一的差別就是單線程和多線程的執(zhí)行。 Stream是什么 Stream是Java8中新加入的api,更準(zhǔn)確的說(shuō): Java 8 中的 Stream 是對(duì)集合(Collection)對(duì)象功能的增強(qiáng),它專注于對(duì)集合對(duì)象進(jìn)行各種非常便...
摘要:新特性總覽標(biāo)簽本文主要介紹的新特性,包括表達(dá)式方法引用流默認(rèn)方法組合式異步編程新的時(shí)間,等等各個(gè)方面。還有對(duì)應(yīng)的和類型的函數(shù)連接字符串廣義的歸約匯總起始值,映射方法,二元結(jié)合二元結(jié)合。使用并行流時(shí)要注意避免共享可變狀態(tài)。 Java8新特性總覽 標(biāo)簽: java [TOC] 本文主要介紹 Java 8 的新特性,包括 Lambda 表達(dá)式、方法引用、流(Stream API)、默認(rèn)方...
摘要:比如對(duì)一個(gè)數(shù)據(jù)流進(jìn)行過(guò)濾映射以及求和運(yùn)算,通過(guò)使用延后機(jī)制,那么所有操作只要遍歷一次,從而減少中間調(diào)用。這里需知道中的元素都是延遲計(jì)算的,正因?yàn)榇?,能夠?jì)算無(wú)限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達(dá)式對(duì)比。在本文,將進(jìn)行 Hussachai Puripunpinyo Java 和 Scala 對(duì)比三部曲的第二部分,主要關(guān)注 Stream...
摘要:運(yùn)行機(jī)制分為源,中間操作,終止操作。反過(guò)來(lái)說(shuō),目前還無(wú)法專為某個(gè)并行流指定這個(gè)值。我們?cè)诒竟?jié)中已經(jīng)指出,并行流不總是比順序流快。特別是和等依賴于元素順序的操作,它們?cè)诓⑿辛魃蠄?zhí)行的代價(jià)非常大。1 Stream Stream是一組用來(lái)處理數(shù)組,集合的API。 1.1 特性 不是數(shù)據(jù)結(jié)構(gòu),沒(méi)有內(nèi)部存儲(chǔ)。 不支持索引訪問(wèn)。 延遲計(jì)算 支持并行 很容易生成數(shù)據(jù)或集合 支持過(guò)濾,查找,轉(zhuǎn)換,匯總,...
摘要:簡(jiǎn)而言之,提供了一種高效且易于使用的處理數(shù)據(jù)的方式。和以前的操作不同,操作還有兩個(gè)基礎(chǔ)的特征中間操作都會(huì)返回流對(duì)象本身。注意自己不會(huì)存儲(chǔ)元素不會(huì)改變?cè)磳?duì)象,相反,它們會(huì)返回一個(gè)持有結(jié)果的新操作時(shí)延遲執(zhí)行的。為集合創(chuàng)建并行流。 1. 概述 1.1 簡(jiǎn)介 Java 8 中有兩大最為重要的改革,第一個(gè)是 Lambda 表達(dá)式,另外一個(gè)則是 Stream API(java.util.strea...
閱讀 2040·2023-04-26 02:15
閱讀 2309·2021-11-19 09:40
閱讀 1051·2021-10-27 14:13
閱讀 3322·2021-08-23 09:44
閱讀 3622·2019-12-27 12:24
閱讀 661·2019-08-30 15:53
閱讀 1175·2019-08-30 10:53
閱讀 2167·2019-08-26 12:14