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

Java Stream流 Map 分組方式匯總

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

java老式的分組方式(對(duì)list for循環(huán)然后 if判斷?放入map)?代碼復(fù)雜,易讀性差,維護(hù)性差,故本文匯總了Stream流中的分組方法供大家參考,如對(duì)您有幫助,請(qǐng)?zhí)Ц哔F的小手點(diǎn)個(gè)贊吧,歡迎大佬留下高見(jiàn)

(以下方法默認(rèn)都是java8的方法,java9新增方法有標(biāo)注)

List<Student> studentList = Arrays.asList(

new Student(1L,"小紅","籃球","紅色",22),

new Student(2L,"小白","足球","藍(lán)色",11),

new Student(3L,"小牛","足球","黑色",33),

new Student(4L,"小羊","足球","紅色",17),

new Student(5L,"小綠","足球","藍(lán)色",24));

1.常規(guī)按對(duì)象的字段直接將對(duì)象分組

按顏色分組

Map<String, List<Student>> byColor = studentList.stream()
.collect(groupingBy(Student::getColor));

打印Map結(jié)果:

{紅色=[Student{id=1, name='小紅', hobby='籃球', color='紅色', age=22}, Student{id=4, name='小羊', hobby='足球', color='紅色', age=17}],

藍(lán)色=[Student{id=2, name='小白', hobby='足球', color='藍(lán)色', age=11}, Student{id=5, name='小綠', hobby='足球', color='藍(lán)色', age=24}],

黑色=[Student{id=3, name='小牛', hobby='籃球', color='黑色', age=33}]}

2.對(duì)分組的條件(key)做定義將對(duì)象進(jìn)行分組

按年紀(jì)是否大于十八歲分組

Map<String, List<Student>> collect1 = studentList.stream().collect(groupingBy(key -> {

if (key.getAge() > 18) {

return "成年";

} else {

return "未成年";

}

}));

打印Map結(jié)果:

{未成年=[Student{id=2, name='小白', hobby='足球', color='藍(lán)色', age=11}, Student{id=4, name='小羊', hobby='足球', color='紅色', age=17}],

成年=[Student{id=1, name='小紅', hobby='籃球', color='紅色', age=22}, Student{id=3, name='小牛', hobby='籃球', color='黑色', age=33}, Student{id=5, name='小綠', hobby='足球', color='藍(lán)色', age=24}]}

3.在分組時(shí)對(duì)數(shù)據(jù)進(jìn)行過(guò)濾

過(guò)濾掉不想要的數(shù)據(jù)時(shí),

在java8,需在分組前對(duì)集合進(jìn)行過(guò)濾,再分組。但會(huì)導(dǎo)致一類key中的元素都被過(guò)濾掉以后,分組結(jié)果不會(huì)有該key.

Map<String, List<Student>> collect = studentList.stream()
.filter(f->!"紅色".equals(f.getColor()))
.collect(groupingBy(Student::getColor));

打印Map結(jié)果:

{黑色=[Student{id=3, name='小牛', hobby='籃球', color='黑色', age=33}],

藍(lán)色=[Student{id=2, name='小白', hobby='足球', color='藍(lán)色', age=11}, Student{id=5, name='小綠', hobby='足球', color='藍(lán)色', age=24}]}

java9新增方法 filtering()方法,可以在分組時(shí)進(jìn)行過(guò)濾,以避免分組的結(jié)果map,因?yàn)檫^(guò)濾掉了一種key內(nèi)的所有元素導(dǎo)致map中沒(méi)有該key

filtering()

Map<String, List<Student>> collect = studentList.stream()
.collect(groupingBy(Student::getColor,
filtering(f->!"紅色".equals(f.getColor()),toList())));

打印Map結(jié)果:

{黑色=[Student{id=3, name='小牛', hobby='籃球', color='黑色', age=33}],

藍(lán)色=[Student{id=2, name='小白', hobby='足球', color='藍(lán)色', age=11}, Student{id=5, name='小綠', hobby='足球', color='藍(lán)色', age=24}],

紅色=[]}

4.在分組時(shí),將收集的對(duì)象映射處理為其他值

Map<String, List<String >> collect = studentList.stream()
.collect(groupingBy(Student::getColor,mapping(Student::getName,toList())));

打印Map結(jié)果:

{黑色=[小牛],

藍(lán)色=[小白, 小綠],

紅色=[小紅, 小羊]}

或?qū)apping()替換為其他方法對(duì)子組的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)處理,比如maxBy()求子組中的Optional(最大值),或collectingAndThen(maxBy(),Optional::get)去除外層的Optional,直接獲得最大值.

或者替換為求和,sumInt等

5.在分組時(shí),如果收集的value為list中包list,想將兩層list轉(zhuǎn)為一層,可使用flatmapping()方法

java9新增方法

和java8的flatmap()方法一樣,通過(guò)將需要收集的集合元素A收集到總集合B時(shí),將A中的單個(gè)集合轉(zhuǎn)為Stream,和B的Stream通過(guò)flatmap()方法,將中間A的Stream去掉,當(dāng)A中的單個(gè)集合中的元素都拿出來(lái)放到B中.

兩層

Map<String,List<List<String>>> 將兩層List拆開(kāi) Map<String,List<String>>

Map<String, List<List<String >>> collect = studentList.stream()
.collect(groupingBy(Student::getHobby,
mapping(m->colorToMindMap.get(m.getColor()),toList())));



Map<String, List<String >> collect = studentList.stream()
.collect(groupingBy(Student::getHobby,
flatMapping(f->colorToMindMap.get(f.getColor()).stream(),toList())));

6.多級(jí)分組

所謂多級(jí)分組,就是在groupingBy(a,b)的第二個(gè)參數(shù)繼續(xù)放groupingBy(a,b)方法.規(guī)則和原來(lái)一樣.

在平時(shí)用的groupingBy(Student::getColor)內(nèi)部調(diào)用的其實(shí)就是groupingBy(Student::getColor,toList()), toList()方法就代表著將元素按list的形式來(lái)存儲(chǔ)到對(duì)應(yīng)的key下,改成groupBy(a,b)就是以分組的方式繼續(xù)存儲(chǔ).文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455101.html

到了這里,關(guān)于Java Stream流 Map 分組方式匯總的文章就介紹完了。如果您還想了解更多內(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)文章

  • Java8 Stream分組groupBy后,取單一字段值、取列表第一個(gè)值方式

    java8 Stream中g(shù)roupBy的拓展用法。 取單一字段值、取列表第一個(gè)值方式

    2024年02月14日
    瀏覽(21)
  • Java 中多種循環(huán) Map 的方式詳解

    在 Java 中,我們經(jīng)常需要對(duì) Map 類型的數(shù)據(jù)進(jìn)行遍歷,以便進(jìn)行數(shù)據(jù)處理或輸出。Java 提供了多種循環(huán) Map 的方式,每種方式都有其適用的場(chǎng)景。本文將介紹 Java 中常見(jiàn)的幾種循環(huán) Map 的方式,并對(duì)它們進(jìn)行詳細(xì)的講解。 在這種方式中,通過(guò)調(diào)用 entrySet() 方法,將 Map 轉(zhuǎn)換成

    2024年02月04日
    瀏覽(21)
  • java 對(duì)象list使用stream根據(jù)某一個(gè)屬性轉(zhuǎn)換成map的幾種方式

    可以使用Java 8中的Stream API將List轉(zhuǎn)換為Map,并根據(jù)某個(gè)屬性作為鍵或值。以下是一些示例代碼: 在這個(gè)示例中,將Person對(duì)象列表轉(zhuǎn)換為Map,其中鍵為Person對(duì)象的name屬性,值為Person對(duì)象本身。 在這個(gè)示例中,將Person對(duì)象列表轉(zhuǎn)換為Map,其中鍵為Person對(duì)象本身,值為Person對(duì)象的

    2024年02月13日
    瀏覽(97)
  • Java stream 分組操作

    根據(jù)單/多字段分組 單字段分組可以直接使用指定字段,多字段分組則采用拼接Key的形式 單字段: 多字段: 多層級(jí): 測(cè)試

    2024年02月15日
    瀏覽(25)
  • java stream實(shí)現(xiàn)分組BigDecimal求和,自定義分組求和

    隨著微服務(wù)的發(fā)展,越來(lái)越多的sql處理被放到j(luò)ava來(lái)處理,數(shù)據(jù)庫(kù)經(jīng)常會(huì)使用到對(duì)集合中的數(shù)據(jù)進(jìn)行分組求和,分組運(yùn)算等等。 那怎么樣使用java的stream優(yōu)雅的進(jìn)行分組求和或運(yùn)算呢? 這里測(cè)試數(shù)據(jù)學(xué)生,年齡類型是Integer,身高類型是BigDecimal,我們分別對(duì)身高個(gè)年齡進(jìn)行求和

    2024年02月01日
    瀏覽(27)
  • Java stream多字段分組(groupingBy)

    Java stream多字段分組(groupingBy)

    近期的項(xiàng)目里,遇到一個(gè)需求:對(duì)于含有多個(gè)元素的 ListPerson ,按照其中的某幾個(gè)屬性進(jìn)行分組,比如 Persion::getAge 、 Persion::getType 、 Persion::getGender 等字段。下面就讓我們討論一下如何比較優(yōu)雅的按多字段進(jìn)行分組groupingBy。 Stream 是Java8的一個(gè)新特性,主要用戶集合數(shù)據(jù)的處

    2024年02月13日
    瀏覽(25)
  • Java中用Stream分組并求各組數(shù)量

    Java中用Stream分組并求各組數(shù)量

    比如給了我一個(gè)班級(jí)的所有人的姓氏和姓名對(duì)象集合,根據(jù)這個(gè)集合求出各姓氏有多少人。直接上代碼。 User的實(shí)體類對(duì)象為 輸出的結(jié)果為: ? 即姓張的有3個(gè),姓李的有兩個(gè)。 詳解:?將該集合的stream流用Collectors對(duì)象轉(zhuǎn)成Map,用User對(duì)象的firstName作為Key,默認(rèn)鍵值為1,在處

    2024年02月12日
    瀏覽(24)
  • Java Stream 實(shí)用特性:排序、分組和 teeing

    基本數(shù)據(jù)類型排序 基本數(shù)據(jù)類型就是字符串、整型、浮點(diǎn)型這些,也就是要排序的列表中的元素都是這些基本類型的,比如 ListInteger 的。 下面就用一個(gè)整型列表舉例說(shuō)明。 正序排序 正序排序,也可以叫做按照自然順序排序,對(duì)于整型來(lái)說(shuō)就是從小到大的。 輸出結(jié)果是 [0

    2024年02月03日
    瀏覽(21)
  • Java8 Stream 之groupingBy 分組講解

    本文主要講解:Java 8 Stream之Collectors.groupingBy()分組示例 Collectors.groupingBy() 分組之常見(jiàn)用法 功能代碼: /** ?? ? * 使用java8 stream groupingBy操作,按城市分組list ?? ? */ ?? ?public void groupingByCity() { ?? ??? ?MapString, ListEmployee map = employees.stream().collect(Collectors.groupingBy(Employee::getCi

    2024年02月13日
    瀏覽(25)
  • Java Stream流實(shí)現(xiàn)多字段分組groupingBy操作

    近期的項(xiàng)目里,遇到一個(gè)需求:對(duì)于含有多個(gè)元素的List,按照其中的某幾個(gè)屬性進(jìn)行分組,比如Report::getPersonID、Report::getSchoolYear、Report::getDataType等字段。下面就讓我們討論一下如何比較優(yōu)雅的按多字段進(jìn)行分組groupingBy。 利用單個(gè)字段進(jìn)行分組 如上面的Report類,如果對(duì)于其

    2024年02月07日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包