国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-11-22 15:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

本身我是一個比較偏向少使用Stream的人,因為調試比較不方便。

但是, 不得不說,stream確實會給我們編碼帶來便捷。

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

正文

Stream流 其實操作分三大塊 :

  • 創建
  • 處理
  • 收集

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

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

OK,開始結合代碼示例一起玩下:

lombok依賴引入,代碼簡潔一點:

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

準備一個UserDTO.java

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

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

}

準備一個模擬獲取List的函數:

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;
}

第一個小玩法

將集合通過Stream.collect() 轉換成其他集合/數組:

現在拿List 做例子

轉成 HashSet

ListuserList=getUserList();

StreamusersStream=userList.stream();

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

轉成 Set usersSet

ListuserList=getUserList();

StreamusersStream=userList.stream();

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

轉成 ArrayList

ListuserList=getUserList();

StreamusersStream=userList.stream();

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

轉成 Object[] objects

ListuserList=getUserList();

StreamusersStream=userList.stream();

Object[]objects=usersStream.toArray();

轉成 UserDTO[] users

ListuserList=getUserList();

StreamusersStream=userList.stream();

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

第二個小玩法

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

找出年齡最大:
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();
統計數量:
longcountNew=usersStream.count();
簡單分組:

按照具體年齡分組:

//按照具體年齡分組
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
多級復雜分組:
//多級分組
//1.先根據年齡分組
//2.然后再根據性別分組
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


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116421
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73958
  • Stream
    +關注

    關注

    0

    文章

    21

    瀏覽量

    8251

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

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    汽車網絡安全開發語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    汽車網絡安全如何選編程語言?C、C++、Rust、Java……誰更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語言的優劣與適用場景,以及Perforce QAC/Klocwork對MISRA、CERT等規范的支持。
    的頭像 發表于 12-26 11:13 ?423次閱讀
    汽車網絡安全開發語言選型指南:C/C++/Rust/<b class='flag-5'>Java</b>等主流語言對比+Perforce QAC/Klocwork工具支持

    嵌入式編程中高低位交換如何實現?

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

    飛凌嵌入式ElfBoard-標準IO接口檢查和復位

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

    Arm Neoverse CPU上大代碼量Java應用的性能測試

    Java 是互聯網領域廣泛使用的編程語言。Java 應用的一些特性使其性能表現與提前編譯的原生應用(例如 C 程序)大相徑庭。由于 Java 字節碼無法直接在 CPU 上執行,因此通常運行時在
    的頭像 發表于 11-05 11:25 ?752次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應用的性能測試

    翼輝信息RealEvo-Stream 2.0.0重磅發布

    當嵌入式開發邁入 “效率為王、體驗至上” 的新時代,開發者對工具的要求早已不止于 “能用”,更追求 “好用、高效、靈活”。作為翼輝信息專為嵌入式領域打造的輕量化開發環境,RealEvo-Stream
    的頭像 發表于 10-29 11:45 ?1068次閱讀
    翼輝信息RealEvo-<b class='flag-5'>Stream</b> 2.0.0重磅發布

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

    企業級Java環境越來越復雜,真正的破局點,可能不在“人”,而在于“工具”。5個實用建議,幫你理清Java工具的選型思路。
    的頭像 發表于 09-11 13:59 ?1476次閱讀
    <b class='flag-5'>Java</b>效率提升指南:5個<b class='flag-5'>Java</b>工具選型建議及Perforce JRebel和XRebel介紹

    STM32F405RGT6 ADC2+TIM4觸發+DMA(DMA2_Stream2_CH1)+DMA中斷會死機,怎么解決?

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

    翼輝信息RealEvo-Stream的高效移植過程

    翼輝新型開發環境 RealEvo-Stream 相比 RealEvo-IDE 功能上有什么差異?相信很多開發者會有這個疑問。先簡單回答這個問題,二者面向的用戶群體不同,RealEvo-IDE 主要
    的頭像 發表于 07-05 16:00 ?1295次閱讀
    翼輝信息RealEvo-<b class='flag-5'>Stream</b>的高效移植過程

    RDMA簡介8AXI分析

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

    RDMA簡介8AXI 總線協議分析1

    ,分別為:AXI4、AXI4-Lite 和 AXI4-Stream接口。其中 AXI4 也稱為 AXI4-Full 是一種基于地址的高性能傳輸接口,其支持亂序傳輸、突發傳輸等傳輸方式,同時通過獨立
    發表于 06-24 18:00

    翼輝信息推出全新開發環境RealEvo-Stream

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

    EtherCAT運動控制卡應用開發教程之Java

    運動控制卡的Java開發及DLL調用
    的頭像 發表于 06-13 14:29 ?887次閱讀
    EtherCAT運動控制卡應用開發教程之<b class='flag-5'>Java</b>

    Java開發者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發者在用?

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

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

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