91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(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依賴(lài)引入,代碼簡(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()

寫(xiě)法 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());
}

寫(xiě)法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()

寫(xiě)法 1:

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

寫(xiě)法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
求和:

寫(xiě)法1:

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

寫(xiě)法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ò)程加寫(xiě)判斷邏輯:

//按照性別分為"男"一組"女"一組
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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    20

    文章

    3001

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    74001
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    8253

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32L062x8:超低功耗32位MCU的卓越

    STM32L062x8:超低功耗32位MCU的卓越選 在當(dāng)今的電子設(shè)計(jì)領(lǐng)域,低功耗、高性能的微控制器(MCU)是眾多應(yīng)用的核心需求。STMicroelectronics推出的STM32L062x8
    的頭像 發(fā)表于 03-02 15:20 ?129次閱讀

    汽車(chē)網(wǎng)絡(luò)安全開(kāi)發(fā)語(yǔ)言選型指南:C/C++/Rust/Java等主流語(yǔ)言對(duì)比+Perforce QAC/Klocwork工具支持

    汽車(chē)網(wǎng)絡(luò)安全如何選編程語(yǔ)言?C、C++、Rust、Java……誰(shuí)更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語(yǔ)言的優(yōu)劣與適用場(chǎng)景,以及Perforce QAC/Klocwork對(duì)MISRA、CERT等規(guī)范的支持。
    的頭像 發(fā)表于 12-26 11:13 ?443次閱讀
    汽車(chē)網(wǎng)絡(luò)安全開(kāi)發(fā)語(yǔ)言選型指南:C/C++/Rust/<b class='flag-5'>Java</b>等主流語(yǔ)言對(duì)比+Perforce QAC/Klocwork工具支持

    嵌入式編程中高低位交換如何實(shí)現(xiàn)?

    ->4對(duì)應(yīng)位的交換,變成10001011。 這里就需要有位操作的知識(shí),參考 位操作運(yùn)算有什么奇技淫巧?(附源碼) 這里我們以8位數(shù)據(jù)高低位轉(zhuǎn)換為例子: 1#include 2
    發(fā)表于 12-24 08:25

    飛凌嵌入式ElfBoard-標(biāo)準(zhǔn)IO接口檢查和復(fù)位

    標(biāo)志或end-of-file標(biāo)志來(lái)確定具體的情況。1.feof用于檢查stream所指文件的end-of-file標(biāo)志是否存在。1)頭文件#include 2)函數(shù)原型int feof(FILE
    發(fā)表于 11-13 08:56

    Arm Neoverse CPU上大代碼量Java應(yīng)用的性能測(cè)試

    Java 是互聯(lián)網(wǎng)領(lǐng)域廣泛使用的編程語(yǔ)言。Java 應(yīng)用的一些特性使其性能表現(xiàn)與提前編譯的原生應(yīng)用(例如 C 程序)大相徑庭。由于 Java 字節(jié)碼無(wú)法直接在 CPU 上執(zhí)行,因此通常運(yùn)行時(shí)在
    的頭像 發(fā)表于 11-05 11:25 ?764次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應(yīng)用的性能測(cè)試

    翼輝信息RealEvo-Stream 2.0.0重磅發(fā)布

    當(dāng)嵌入式開(kāi)發(fā)邁入 “效率為王、體驗(yàn)至上” 的新時(shí)代,開(kāi)發(fā)者對(duì)工具的要求早已不止于 “能用”,更追求 “好用、高效、靈活”。作為翼輝信息專(zhuān)為嵌入式領(lǐng)域打造的輕量化開(kāi)發(fā)環(huán)境,RealEvo-Stream
    的頭像 發(fā)表于 10-29 11:45 ?1080次閱讀
    翼輝信息RealEvo-<b class='flag-5'>Stream</b> 2.0.0重磅發(fā)布

    Java效率提升指南:5個(gè)Java工具選型建議及Perforce JRebel和XRebel介紹

    企業(yè)級(jí)Java環(huán)境越來(lái)越復(fù)雜,真正的破局點(diǎn),可能不在“人”,而在于“工具”。5個(gè)實(shí)用建議,幫你理清Java工具的選型思路。
    的頭像 發(fā)表于 09-11 13:59 ?1519次閱讀
    <b class='flag-5'>Java</b>效率提升指南:5個(gè)<b class='flag-5'>Java</b>工具選型建議及Perforce JRebel和XRebel介紹

    STM32F405RGT6 ADC2+TIM4觸發(fā)+DMA(DMA2_Stream2_CH1)+DMA中斷會(huì)死機(jī),怎么解決?

    ADC1+TIM4觸發(fā)+DMA(DMA2_Stream0_CH0)+DMA中斷完全正常更改為ADC2+TIM4觸發(fā)+DMA(DMA2_Stream2_CH1)+DMA中斷會(huì)死機(jī)(取消中斷后完全正常
    發(fā)表于 08-04 07:16

    翼輝信息RealEvo-Stream的高效移植過(guò)程

    翼輝新型開(kāi)發(fā)環(huán)境 RealEvo-Stream 相比 RealEvo-IDE 功能上有什么差異?相信很多開(kāi)發(fā)者會(huì)有這個(gè)疑問(wèn)。先簡(jiǎn)單回答這個(gè)問(wèn)題,二者面向的用戶(hù)群體不同,RealEvo-IDE 主要
    的頭像 發(fā)表于 07-05 16:00 ?1308次閱讀
    翼輝信息RealEvo-<b class='flag-5'>Stream</b>的高效移植過(guò)程

    RDMA簡(jiǎn)介8AXI分析

    AXI4 總線(xiàn)是第四代 AXI 總線(xiàn),其定義了三種總線(xiàn)接口,分別為:AXI4、AXI4-Lite 和 AXI4-Stream接口。其中 AXI4 也稱(chēng)為 AXI4-Full 是一種基于地址的高性能
    的頭像 發(fā)表于 06-24 23:22 ?646次閱讀
    RDMA簡(jiǎn)介<b class='flag-5'>8</b><b class='flag-5'>之</b>AXI分析

    RDMA簡(jiǎn)介8AXI 總線(xiàn)協(xié)議分析1

    ,分別為:AXI4、AXI4-Lite 和 AXI4-Stream接口。其中 AXI4 也稱(chēng)為 AXI4-Full 是一種基于地址的高性能傳輸接口,其支持亂序傳輸、突發(fā)傳輸?shù)葌鬏敺绞?,同時(shí)通過(guò)獨(dú)立
    發(fā)表于 06-24 18:00

    翼輝信息推出全新開(kāi)發(fā)環(huán)境RealEvo-Stream

    翼輝信息推出全新開(kāi)發(fā)環(huán)境—— RealEvo-Stream。全面融合云與 AI 能力,基于 VSCode 插件即可快速上手開(kāi)發(fā) SylixOS 應(yīng)用。支持 Windows、Linux 及 macOS
    的頭像 發(fā)表于 06-18 15:06 ?1282次閱讀
    翼輝信息推出全新開(kāi)發(fā)環(huán)境RealEvo-<b class='flag-5'>Stream</b>

    EtherCAT運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之Java

    運(yùn)動(dòng)控制卡的Java開(kāi)發(fā)及DLL調(diào)用
    的頭像 發(fā)表于 06-13 14:29 ?894次閱讀
    EtherCAT運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之<b class='flag-5'>Java</b>

    Java開(kāi)發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開(kāi)發(fā)者在用?

    Perforce JRebel是一款Java開(kāi)發(fā)效率工具,旨在幫助java開(kāi)發(fā)人員更快地編寫(xiě)更好的應(yīng)用程序。JRebel可即時(shí)重新加載對(duì)代碼的修改,無(wú)需重啟或重新部署應(yīng)用程序,就能讓開(kāi)發(fā)者即時(shí)看到代碼更改的效果,從而縮短開(kāi)發(fā)、調(diào)試和測(cè)試周期,大大提升開(kāi)發(fā)效率。
    的頭像 發(fā)表于 04-27 13:44 ?866次閱讀
    <b class='flag-5'>Java</b>開(kāi)發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開(kāi)發(fā)者在用?

    一文詳解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 ?2782次閱讀
    一文詳解Video In to AXI4-<b class='flag-5'>Stream</b> IP核