chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

前言

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

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

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

正文

Stream流 其實操作分三大塊 :

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

我今天想分享的是 收集 這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的函數(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;
}

第一個小玩法

將集合通過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());
}

第二個小玩法

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

找出年齡最大:
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)
找出年齡最?。?/h5>
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)計數(shù)量:
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.先根據(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)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3005

    瀏覽量

    116800
  • 代碼
    +關注

    關注

    30

    文章

    4975

    瀏覽量

    74339
  • Stream
    +關注

    關注

    0

    文章

    21

    瀏覽量

    8257

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EFM8SB2:低功耗8位MCU的卓越

    EFM8SB2:低功耗8位MCU的卓越選 在當今的電子設備設計中,低功耗、高性能的微控制器(MCU)是眾多工程師的追求。EFM8SB2作為Sleepy Bee家族的一員,正是這樣一款
    的頭像 發(fā)表于 04-15 16:40 ?97次閱讀

    探索EFM8SB2:低功耗8位MCU的卓越

    探索EFM8SB2:低功耗8位MCU的卓越選 在當今的電子設備設計領域,低功耗、高性能的微控制器(MCU)是眾多工程師追求的目標。Silicon Labs的EFM8SB2系列MCU,
    的頭像 發(fā)表于 04-15 14:20 ?105次閱讀

    EFM8BB3:高性能8位MCU的卓越

    EFM8BB3:高性能8位MCU的卓越選 在電子工程師的設計世界里,選擇一款合適的微控制器(MCU)至關重要。EFM8BB3作為Busy Bee系列MCU的一員,以其出色的性能和豐富
    的頭像 發(fā)表于 04-15 14:05 ?130次閱讀

    深入剖析EFM8BB3:8位MCU的卓越

    深入剖析EFM8BB3:8位MCU的卓越選 在電子工程師的日常工作中,選擇一款合適的微控制器(MCU)至關重要。今天,我們就來深入了解一下Silicon Labs的EFM8BB3系列
    的頭像 發(fā)表于 04-15 14:05 ?108次閱讀

    深入剖析EFM8BB2:8位MCU的卓越

    深入剖析EFM8BB2:8位MCU的卓越選 在當今的電子設備設計領域,微控制器(MCU)扮演著至關重要的角色。Silicon Labs的EFM8BB2系列MCU作為Busy Bee家
    的頭像 發(fā)表于 04-15 13:55 ?113次閱讀

    深入解析STM8L151x6/8與STM8L152x6/88位超低功耗MCU的卓越

    深入解析STM8L151x6/8與STM8L152x6/88位超低功耗MCU的卓越選 在電子
    的頭像 發(fā)表于 03-31 17:30 ?526次閱讀

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

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

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

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

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

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

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

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

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

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

    RDMA簡介8AXI分析

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

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

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

    EtherCAT運動控制卡應用開發(fā)教程之Java

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

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

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