在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java 8 Stream之collect()的奇技淫巧

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-11-22 15:49 ? 次閱讀

前言

本身我是一個(gè)比較偏向少使用Stream的人,因?yàn)檎{(diào)試比較不方便。

但是, 不得不說,stream確實(shí)會(huì)給我們編碼帶來便捷。

所以還是忍不住想分享一些奇技淫巧。

正文

Stream流 其實(shí)操作分三大塊 :

  • 創(chuàng)建
  • 處理
  • 收集

我今天想分享的是 收集 這part的玩法。

3e15ee36-6998-11ed-8abf-dac502259ad0.png

OK,開始結(jié)合代碼示例一起玩下:

lombok依賴引入,代碼簡(jiǎn)潔一點(diǎn):

<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.20version>
<scope>compilescope>
dependency>

準(zhǔn)備一個(gè)UserDTO.java

/**
*@Author:JCccc
*@Description:
*/
@Data
publicclassUserDTO{

/**
*姓名
*/
privateStringname;
/**
*年齡
*/
privateIntegerage;
/**
*性別
*/
privateStringsex;
/**
*是否有方向
*/
privateBooleanhasOrientation;

}

準(zhǔn)備一個(gè)模擬獲取List的函數(shù):

privatestaticListgetUserList(){
UserDTOuserDTO=newUserDTO();
userDTO.setName("小冬");
userDTO.setAge(18);
userDTO.setSex("男");
userDTO.setHasOrientation(false);
UserDTOuserDTO2=newUserDTO();
userDTO2.setName("小秋");
userDTO2.setAge(30);
userDTO2.setSex("男");
userDTO2.setHasOrientation(true);
UserDTOuserDTO3=newUserDTO();
userDTO3.setName("春");
userDTO3.setAge(18);
userDTO3.setSex("女");
userDTO3.setHasOrientation(true);
ListuserList=newArrayList<>();
userList.add(userDTO);
userList.add(userDTO2);
userList.add(userDTO3);
returnuserList;
}

第一個(gè)小玩法

將集合通過Stream.collect() 轉(zhuǎn)換成其他集合/數(shù)組:

現(xiàn)在拿List 做例子

轉(zhuǎn)成 HashSet

ListuserList=getUserList();

StreamusersStream=userList.stream();

HashSetusersHashSet=usersStream.collect(Collectors.toCollection(HashSet::new));

轉(zhuǎn)成 Set usersSet

ListuserList=getUserList();

StreamusersStream=userList.stream();

SetusersSet=usersStream.collect(Collectors.toSet());

轉(zhuǎn)成 ArrayList

ListuserList=getUserList();

StreamusersStream=userList.stream();

ArrayListusersArrayList=usersStream.collect(Collectors.toCollection(ArrayList::new));

轉(zhuǎn)成 Object[] objects

ListuserList=getUserList();

StreamusersStream=userList.stream();

Object[]objects=usersStream.toArray();

轉(zhuǎn)成 UserDTO[] users

ListuserList=getUserList();

StreamusersStream=userList.stream();

UserDTO[]users=usersStream.toArray(UserDTO[]::new);
for(UserDTOuser:users){
System.out.println(user.toString());
}

第二個(gè)小玩法

聚合(求和、最小、最大、平均值、分組)

找出年齡最大:
stream.max()

寫法 1:

ListuserList=getUserList();
StreamusersStream=userList.stream();
OptionalmaxUserOptional=
usersStream.max((s1,s2)->s1.getAge()-s2.getAge());
if(maxUserOptional.isPresent()){
UserDTOmasUser=maxUserOptional.get();
System.out.println(masUser.toString());
}

寫法2:

ListuserList=getUserList();StreamusersStream=userList.stream();
OptionalmaxUserOptionalNew=usersStream.max(Comparator.comparingInt(UserDTO::getAge));
if(maxUserOptionalNew.isPresent()){
UserDTOmasUser=maxUserOptionalNew.get();
System.out.println(masUser.toString());
}

效果:

3e23fde6-6998-11ed-8abf-dac502259ad0.png

輸出:

UserDTO(name=小秋,age=30,sex=男,hasOrientation=true)
找出年齡最小:
stream.min()

寫法 1:

OptionalminUserOptional=usersStream.min(Comparator.comparingInt(UserDTO::getAge));
if(minUserOptional.isPresent()){
UserDTOminUser=minUserOptional.get();
System.out.println(minUser.toString());
}

寫法2:

Optionalmin=usersStream.collect(Collectors.minBy((s1,s2)->s1.getAge()-s2.getAge()));
求平均值:
ListuserList=getUserList();
StreamusersStream=userList.stream();
DoubleavgScore=usersStream.collect(Collectors.averagingInt(UserDTO::getAge));

效果:

3e322330-6998-11ed-8abf-dac502259ad0.png
求和:

寫法1:

IntegerreduceAgeSum=usersStream.map(UserDTO::getAge).reduce(0,Integer::sum);

寫法2:

intageSumNew=usersStream.mapToInt(UserDTO::getAge).sum();
統(tǒng)計(jì)數(shù)量:
longcountNew=usersStream.count();
簡(jiǎn)單分組:

按照具體年齡分組:

//按照具體年齡分組
Map>ageGroupMap=usersStream.collect(Collectors.groupingBy((UserDTO::getAge)));

效果:

3e471614-6998-11ed-8abf-dac502259ad0.png

分組過程加寫判斷邏輯:

//按照性別分為"男"一組"女"一組
Map>groupMap=usersStream.collect(Collectors.groupingBy(s->{
if(s.getSex().equals("男")){
return1;
}else{
return0;
}
}));

效果:

3e62ead8-6998-11ed-8abf-dac502259ad0.png
多級(jí)復(fù)雜分組:
//多級(jí)分組
//1.先根據(jù)年齡分組
//2.然后再根據(jù)性別分組
Map>>>moreGroupMap=usersStream.collect(Collectors.groupingBy(

//1.KEY(Integer)VALUE(Map>)
UserDTO::getAge,Collectors.groupingBy(
//2.KEY(String)VALUE(Map>)
UserDTO::getSex,Collectors.groupingBy((userDTO)->{
if(userDTO.getSex().equals("男")){
return1;
}else{
return0;
}
}))));

效果:

3e71325a-6998-11ed-8abf-dac502259ad0.png

來源:blog.csdn.net/qq_35387940/article/details/127008965


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106466
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4876

    瀏覽量

    69960
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    8074

原文標(biāo)題:Java 8 Stream 之 collect() 的奇技淫巧

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文詳解Video In to AXI4-Stream IP核

    Video In to AXI4-Stream IP核用于將視頻源(帶有同步信號(hào)的時(shí)鐘并行視頻數(shù)據(jù),即同步sync或消隱blank信號(hào)或者而后者皆有)轉(zhuǎn)換成AXI4-Stream接口形式,實(shí)現(xiàn)了接口轉(zhuǎn)換。該IP還可使用VTC核,VTC在視頻輸入和視頻處理之間起橋梁作用。
    的頭像 發(fā)表于 04-03 09:28 ?684次閱讀
    一文詳解Video In to AXI4-<b class='flag-5'>Stream</b> IP核

    DLPC120+DLP3021是否可以實(shí)現(xiàn)live stream?

    DLPC120+DLP3021是否可以實(shí)現(xiàn)live stream?
    發(fā)表于 02-21 06:16

    Java應(yīng)用OOM問題的排查過程

    導(dǎo)讀 本文記錄最近一例Java應(yīng)用OOM問題的排查過程,希望可以給遇到類似問題的同學(xué)提供參考。 前言:此文記錄最近一例Java應(yīng)用OOM問題的排查過程,希望可以給遇到類似問題的同學(xué)提供參考。在本地
    的頭像 發(fā)表于 02-12 11:15 ?422次閱讀
    <b class='flag-5'>Java</b>應(yīng)用OOM問題的排查過程

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語(yǔ)言功能、核心 API 以及 JVM,同時(shí)適合新的 Java 開發(fā)者和高級(jí)開發(fā)者。從?IntelliJ IDEA 2024.2?開始已支持 Java
    的頭像 發(fā)表于 12-04 10:02 ?711次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java代碼美,從遵循樣式規(guī)范開始

    作者:京東零售 劉仲偉 在軟件開發(fā)的世界里,代碼不僅是程序的基石,更是程序員交流的通用語(yǔ)言。而Java,作為一門廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用的編程語(yǔ)言,其代碼的可讀性和一致性對(duì)于項(xiàng)目的長(zhǎng)期維護(hù)和團(tuán)隊(duì)協(xié)作
    的頭像 發(fā)表于 11-27 11:42 ?454次閱讀
    <b class='flag-5'>Java</b>代碼<b class='flag-5'>之</b>美,從遵循樣式規(guī)范開始

    Java集合API的改進(jìn)介紹

    解答這些問題。 我們將逐步學(xué)習(xí) Java 集合類的優(yōu)化過程,并按版本逐一對(duì)比分析。主要討論的焦點(diǎn)將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能 Java 集合
    的頭像 發(fā)表于 11-22 11:12 ?436次閱讀
    <b class='flag-5'>Java</b>集合API的改進(jìn)介紹

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?791次閱讀

    基于Java的工具Power Stage Designer

    電子發(fā)燒友網(wǎng)站提供《基于Java的工具Power Stage Designer.pdf》資料免費(fèi)下載
    發(fā)表于 11-14 16:01 ?4次下載
    基于<b class='flag-5'>Java</b>的工具Power Stage Designer

    Java中時(shí)間戳的使用

    Java中時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?405次閱讀
    <b class='flag-5'>Java</b>中時(shí)間戳的使用

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C語(yǔ)言和Java語(yǔ)言進(jìn)行詳細(xì)對(duì)比。
    的頭像 發(fā)表于 10-29 17:31 ?806次閱讀

    FPGA Verilog HDL有什么奇技巧?

    今天給大俠帶來在FPAG技術(shù)交流群里平時(shí)討論的問題答疑合集(九),以后還會(huì)多推出本系列,話不多說,上貨。 交流問題(一) Q:Verilog 有什么奇技淫巧? A:在 Verilog 中,以下這些
    發(fā)表于 09-12 19:10

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回Java源代碼的過程。雖然反編譯可以幫助理解代碼的邏輯和結(jié)構(gòu),但它并不總是能完美地還原原始源代碼。反編譯工具通常會(huì)產(chǎn)生與原始代碼
    的頭像 發(fā)表于 09-02 11:03 ?1534次閱讀

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ堋⒂猛竞蛯?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語(yǔ)言,它提供了一種用于開發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?1247次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別

    ESP-ADF下的i2s_stream是否可以全雙工工作?

    請(qǐng)問各位朋友: ESP-ADF下的i2s_stream是否可以全雙工工作,我看了其下的所有關(guān)于I2S的例子程序和create_i2s_stream函數(shù)的源碼,都只能單工工作(要么讀要么寫),我要自行修改與i2s_stream相關(guān)
    發(fā)表于 06-28 06:59

    Oracle確認(rèn)Java/JDK 11官方支持延長(zhǎng)至2032年1月?

    此外,Solaris操作系統(tǒng)上的Java SE 8Java SE 11的官方支持也同步延期至2030年12月及2032年1月,進(jìn)一步延長(zhǎng)了該平臺(tái)上的Java服務(wù)周期。
    的頭像 發(fā)表于 05-16 15:57 ?1821次閱讀
    主站蜘蛛池模板: 天天做天天摸天天爽天天爱 | 成人黄网大全在线观看 | 午夜精品久久久久久 | 天天做人人爱夜夜爽2020毛片 | 521色香蕉网在线观看免费 | videosgratis乱色欧美野外 | 亚洲精品第三页 | 起碰免费视频 | 最新欧美伦理网 | 伊人草 | 日本一级成人毛片免费观看 | 成年女人毛片 | 黄色福利网 | 欧美在线bdsm调教一区 | 你懂的网站在线 | 男女免费在线视频 | 两性色午夜视频免费老司机 | 永久福利盒子日韩日韩免费看 | 久久免费视频网站 | 国产一级真人毛爱做毛片 | 日本亚洲视频 | 日韩毛片免费在线观看 | 国产视频一区二 | 日韩中文字幕第一页 | 亚洲天堂资源 | 久草免费新视频 | 欧美性一区 | 你懂的在线观看视频 | 男人的天堂午夜 | 日本在线黄色网址 | 欧美日韩国产另类一区二区三区 | 国产精品乱码高清在线观看 | 黄网站播放 | 亚洲加勒比在线 | 狠狠色噜噜综合社区 | 天天亚洲 | 黄色网址在线免费观看 | 人人97| 国产手机看片 | 天天操夜 | 特黄a大片免费视频 |