色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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)
找出年齡最?。?/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();
統計數量:
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
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104915
  • 代碼
    +關注

    關注

    30

    文章

    4813

    瀏覽量

    68839
  • Stream
    +關注

    關注

    0

    文章

    20

    瀏覽量

    7994

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

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

收藏 人收藏

    評論

    相關推薦

    Java 23功能介紹

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

    Java代碼美,從遵循樣式規范開始

    作者:京東零售 劉仲偉 在軟件開發的世界里,代碼不僅是程序的基石,更是程序員交流的通用語言。而Java,作為一門廣泛應用于企業級應用的編程語言,其代碼的可讀性和一致性對于項目的長期維護和團隊協作
    的頭像 發表于 11-27 11:42 ?245次閱讀
    <b class='flag-5'>Java</b>代碼<b class='flag-5'>之</b>美,從遵循樣式規范開始

    Java集合API的改進介紹

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

    基于Java的工具Power Stage Designer

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

    Java中時間戳的使用

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

    FPGA Verilog HDL有什么奇技巧?

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

    java反編譯能拿到源碼嗎

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

    華納云:java web和java有什么區別java web和java有什么區別

    Java Web和Java是兩個不同的概念,它們在功能、用途和實現方式上存在一些區別,下面將詳細介紹它們之間的區別。 1. 功能和用途: – Java是一種編程語言,它提供了一種用于開發各種應用程序
    的頭像 發表于 07-16 13:35 ?858次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區別

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

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

    Oracle確認Java/JDK 11官方支持延長至2032年1月?

    此外,Solaris操作系統上的Java SE 8Java SE 11的官方支持也同步延期至2030年12月及2032年1月,進一步延長了該平臺上的Java服務周期。
    的頭像 發表于 05-16 15:57 ?1350次閱讀

    已經安裝了Java,且依然提示安裝Java是為什么?

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

    使用STM32F429的DMA多個外設都使用到同樣的DMA_STREAM的時候,就會發生沖突怎么解決?

    最近在使用STM32F429的DMA時候,發現一個問題,當多個外設都使用到同樣的DMA_STREAM的時候,就會發生沖突(后面配置的DMA可用,前面配置的不能用),我用的USART6_TX用
    發表于 04-24 07:13

    java實現多線程的幾種方式

    了多種實現多線程的方式,本文將詳細介紹以下幾種方式: 1.繼承Thread類 2.實現Runnable接口 3.Callable和Future 4.線程池 5.Java 8
    的頭像 發表于 03-14 16:55 ?767次閱讀

    Oracle 2024年Java發展藍圖分析

    Oracle 的 Java 開發者布道師 Nicolai Parlog 于近日發布一段視頻,介紹了 2024 年的 Java 工作規劃。
    的頭像 發表于 01-26 14:27 ?1367次閱讀

    XMC Pinout Tool是否可以不受限制地使用免費的Java版本運行?

    ,我想問一下 Java 許可證是否適用于例如 Java Update 8 381 包含在 Pinout Tool 中,因為此 Java 版本通常會產生許可費用。
    發表于 01-22 06:18
    主站蜘蛛池模板: 秋霞在线看片无码免费| 国产手机在线精品| 国产成人精品免费青青草原app | 一级毛片西西人体44rt高清| qvod 电影| 九九热在线视频| 午夜神器老司机高清无码| 9277高清在线观看视频| 男人一进一出桶女人视频| 先锋影音av最新资源| www.青青草.com| 美女被日出水| 在线va无卡无码高清| 国精品产露脸偷拍视频| 三级黄色在线观看| videosgrati欧美另类| 刘梓晨啪啪啪| 欧美日韩免费播放一区二区| 日日啪在线影院百度| 6 10young俄罗斯| 精品国产自在天天线2019| 色多多污污版免费下载安装| 99久久精品6在线播放| 第一次处破女18分钟免费| 内地同志男16china16| 正在播放国产精品| 久久久精品成人免费看| 一个人免费视频在线观看高清频道| 国产精品999| 四虎免费影院| 国产99视频精品免费播放| 日本午夜精品久久久无码| G国产精品无马| 麒麟色欧美影院在线播放| 99视频久九热精品| 国产伦精品一区二区三区免费| 日韩在线中文字幕无码| 超级乱淫片午夜电影网99| 青青草原国产| 打扑克床上视频不用下载免费观看| 日韩 无码 手机 在线|