在线观看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編程精選 ? 來(lái)源:Android編程精選 ? 作者:Android編程精選 ? 2022-11-22 15:49 ? 次閱讀

前言

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

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

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

正文

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

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

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

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

OK,開(kāi)始結(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è)小玩法

將集合通過(guò)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

分組過(guò)程加寫判斷邏輯:

//按照性別分為"男"一組"女"一組
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

來(lái)源: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ī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2974

    瀏覽量

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

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68954
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    8003

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java 23功能介紹

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

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

    作者:京東零售 劉仲偉 在軟件開(kāi)發(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 ?264次閱讀
    <b class='flag-5'>Java</b>代碼<b class='flag-5'>之</b>美,從遵循樣式規(guī)范開(kāi)始

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

    解答這些問(wèn)題。 我們將逐步學(xué)習(xí) Java 集合類的優(yōu)化過(guò)程,并按版本逐一對(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 ?251次閱讀
    <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 ?419次閱讀

    基于Java的工具Power Stage Designer

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

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

    Java中時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?263次閱讀
    <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 ?415次閱讀

    FPGA Verilog HDL有什么奇技巧?

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

    java反編譯能拿到源碼嗎

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

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

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ堋⒂猛竞蛯?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語(yǔ)言,它提供了一種用于開(kāi)發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?884次閱讀
    華納云:<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)問(wèn)各位朋友: 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 ?1415次閱讀

    已經(jīng)安裝了Java,且依然提示安裝Java是為什么?

    我已經(jīng)在機(jī)器上安裝了最新版的 Java 10,打開(kāi) Cube 卻得到要求安裝 Java 1.7.0_45 的提示。何解?Eclipse CDT 依賴 Java,不可卸載重裝。
    發(fā)表于 04-26 06:23

    使用STM32F429的DMA多個(gè)外設(shè)都使用到同樣的DMA_STREAM的時(shí)候,就會(huì)發(fā)生沖突怎么解決?

    最近在使用STM32F429的DMA時(shí)候,發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)多個(gè)外設(shè)都使用到同樣的DMA_STREAM的時(shí)候,就會(huì)發(fā)生沖突(后面配置的DMA可用,前面配置的不能用),我用的USART6_TX用
    發(fā)表于 04-24 07:13

    java實(shí)現(xiàn)多線程的幾種方式

    了多種實(shí)現(xiàn)多線程的方式,本文將詳細(xì)介紹以下幾種方式: 1.繼承Thread類 2.實(shí)現(xiàn)Runnable接口 3.Callable和Future 4.線程池 5.Java 8
    的頭像 發(fā)表于 03-14 16:55 ?772次閱讀
    主站蜘蛛池模板: 亚洲另类电击调教在线观看 | 日韩黄a级成人毛片 | 日本加勒比在线播放 | 免费看很黄很色裸乳视频 | 天天干亚洲 | 天堂bt资源在线官网 | 91亚色视频在线观看 | 2021韩国理论片ok电影天堂 | 日韩a毛片免费全部播放完整 | 亚洲男人的天堂久久香蕉网 | 午夜影院黄 | 男男浪荡双性受hplay | 国产乱码1卡一卡二卡 | 欧美日韩国产一区二区三区不卡 | 欧美一级片网站 | www永久免费视频 | 国产精品天天干 | 一区视频 | 天堂在线www天堂中文在线 | 欧洲亚洲国产精华液 | 欧亚激情偷乱人伦小说视频 | 福利片在线观看免费高清 | 1024手机在线看 | www.色av.com| 色吧综合网 | 欧美另类69xxxxx性欧 | 亚洲aa在线 | 国产精品免费看久久久香蕉 | 干干干日日日 | 午夜视频在线观看国产www | 免费看黄在线 | 男人午夜视频在线观看 | 国产精品无码永久免费888 | 亚洲成成品网站有线 | 国内精品哆啪啪 | 99精品福利 | 中文字幕有码视频 | 欧美天天性 | 国产精品日韩欧美亚洲另类 | 久久精品30| 视频在线观看免费视频 |