java stream流之groupby的用法

簡單分組
  • 按照年齡對 Person 對象進行分組:
  1. 代碼示例
import java.util.*;
import java.util.stream.Collectors;public class SimpleGrouping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));// 通過對age字段進行分組,得到相同年齡的people對象listMap<Integer, List<Person>> groupedByAge = people.stream().collect(Collectors.groupingBy(Person::getAge));groupedByAge.forEach((age, personList) -> {System.out.println("Age: " + age);personList.forEach(person -> System.out.println(person));});}
}
  1. 輸出結果
Age: 25
Person{name='Bob', age=25}
Person{name='David', age=25}
Age: 30
Person{name='Alice', age=30}
Person{name='Charlie', age=30}
Age: 35
Person{name='Eve', age=35}

分組并統計

  • 按年齡分組并統計每個年齡段的人數:
  1. 代碼示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingAndCounting {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));// 通過對年齡字段進行分組,然后對分組后的數據進行統計Map<Integer, Long> countByAge = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.counting()));countByAge.forEach((age, count) -> {System.out.println("Age: " + age + ", Count: " + count);});}
}
  1. 數據結果
Age: 25, Count: 2
Age: 30, Count: 2
Age: 35, Count: 1

分組并進行數據轉換

  • 按年齡分組,并將每組中的 Person 對象轉換為姓名列表:
  1. 代碼示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingAndMapping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, List<String>> namesByAge = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.mapping(Person::getName, Collectors.toList())));namesByAge.forEach((age, names) -> {System.out.println("Age: " + age + ", Names: " + names);});}
}
  1. 輸出結果
Age: 25, Names: [Bob, David]
Age: 30, Names: [Alice, Charlie]
Age: 35, Names: [Eve]

多級分組

  • 先按年齡分組,再按姓名的首字母進行分組:
  1. 示例代碼

import java.util.*;
import java.util.stream.Collectors;public class MultiLevelGrouping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Map<Character, List<Person>>> multiLevelGrouping = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.groupingBy(person -> person.getName().charAt(0))));multiLevelGrouping.forEach((age, group) -> {System.out.println("Age: " + age);group.forEach((initial, persons) -> {System.out.println("  Initial: " + initial);persons.forEach(person -> System.out.println("    " + person));});});}
}
  1. 輸出結果
Age: 25Initial: BPerson{name='Bob', age=25}Initial: DPerson{name='David', age=25}
Age: 30Initial: APerson{name='Alice', age=30}Initial: CPerson{name='Charlie', age=30}
Age: 35Initial: EPerson{name='Eve', age=35}

分組并收集到不同的集合

  • 按年齡分組,并將每組中的 Person 對象收集到 Set 中:
  1. 代碼示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingToSet {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Set<Person>> groupedByAgeToSet = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.toSet()));groupedByAgeToSet.forEach((age, personSet) -> {System.out.println("Age: " + age);personSet.forEach(person -> System.out.println(person));});}
}
  1. 輸出結果
Age: 25
Person{name='Bob', age=25}
Person{name='David', age=25}
Age: 30
Person{name='Alice', age=30}
Person{name='Charlie', age=30}
Age: 35
Person{name='Eve', age=35}

自定義收集器

  • 按年齡分組,并計算每組的平均年齡:
  1. 代碼示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingWithCustomCollector {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Double> averageAgeByGroup = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.averagingInt(Person::getAge)));averageAgeByGroup.forEach((age, avgAge) -> {System.out.println("Age: " + age + ", Average Age: " + avgAge);});}
}
  1. 輸出結果
Age: 25, Average Age: 25.0
Age: 30, Average Age: 30.0
Age: 35, Average Age: 35.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23363.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23363.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23363.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上市即交付,比亞迪秦L DM-i萬人交車暨千媒眾測開營

6月6日&#xff0c;“引領中級 開創油耗2時代”秦L DM-i萬人交車暨千媒眾測開營儀式在比亞迪大本營深圳盛大舉行。 眾多車主代表親臨現場&#xff0c;與全國各地的比亞迪4S店千店聯動&#xff0c;將秦L DM-i全國交付推向新的高潮。發布即量產&#xff0c;上市即交付&#xff0…

ESP32:FreeRTOS節拍配置(vTaskDelay延時10ms改為1ms)

文章目錄 背景方法手動修改sdkconfig通過idf.py menuconfig 背景 在FreeRTOS的默認配置中&#xff0c;任務調度的頻率默認是100HZ&#xff0c;因此默認vTaskDelay默認延時是10ms。 FreeRTOS 的系統時鐘節拍可以在配置文件 FreeRTOSConfig.h 里面設置&#xff1a;#define confi…

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取 一、問題背景&#xff1a; 在多模塊項目工程中&#xff0c;單個模塊的資源不會放在主模塊中&#xff0c;所以我們需要在子模塊中訪問自己的資源。如果使用默認的資源獲取api&#xff0c;會提示找不到資源。 那如何獲取子模塊下…

【AI基礎】第四步:保姆喂飯級-langchain+chatglm2-6b+m3e-base

在第三步手動安裝chatglm2-6b時&#xff0c;已經可以通過web進行交互。langchain重新封裝了一下AI框架&#xff0c;提供更加友好的開發功能&#xff0c;類似于AI屆的spring框架。langchain的安裝過程也類似于上一步說的&#xff1a;【AI基礎】第三步&#xff1a;純天然手動安裝…

負載均衡

文章目錄 負載均衡的分類負載均衡的算法 負載均衡的分類 對鏈路的負載均衡 對鏈路的負載均衡主要是指應用方有多條ISP網絡出口,比方說電信網通,電信鐵通等,對鏈路的負載均衡也是解決目前電信網通互聯互通的最專業的技術.其實現的原理是根據負載均衡算法來算出,到目標地址的數據…

企業獲客有哪些好的廣告推廣拓客渠道?

在這個數字化營銷的時代&#xff0c;企業要想在激烈的市場競爭中脫穎而出&#xff0c;選擇正確的廣告宣傳渠道至關重要。隨著互聯網技術的飛速發展&#xff0c;各類媒體平臺如雨后春筍般涌現&#xff0c;為企業提供了廣闊的宣傳空間。云銜科技通過多元化的媒體渠道&#xff0c;…

485數據采集模塊

在工業自動化與智能化的浪潮中&#xff0c;數據采集作為整個系統的基礎和核心&#xff0c;其準確性和實時性直接關系到生產效率和產品質量。而485數據采集模塊&#xff0c;作為連接現場設備與上位機的重要橋梁&#xff0c;其性能與穩定性對于整個系統的運行至關重要。HiWoo Box…

【AIGC X UML 落地】通過多智能體實現自然語言繪制UML圖

前天寫了篇博文講到用PlantUML來繪制C類圖和流程圖。后臺有讀者留言&#xff0c;問這步能否自動化生成&#xff0c;不想學習 PlantUML 語法。 我想了下&#xff0c;發現這事可行&#xff0c;確實可以做到通過自然語言的描述就能實現 UML圖的繪制&#xff0c;昨天晚上加了個班到…

B站播放數量如何實現,高并發讀寫計數難點

我們先不考慮用戶規模、并發量、性能、可靠性… 這些東西 我們就單單從功能層面實現統計視頻播放量&#xff0c;其實很簡單&#xff0c; 就是給視頻表加一個字段&#xff0c;用來表示播放量 這樣實現&#xff0c;最大的好處就是簡單&#xff0c;但是我們馬上就能發現一個非常嚴…

Vue 組件之間的通信

在 Vue.js 中&#xff0c;組件是構建應用程序的基本單位。然而&#xff0c;當你的應用程序變得復雜時&#xff0c;組件之間的通信變得至關重要。本文將介紹幾種 Vue 組件之間通信的方式&#xff0c;幫助你更好地管理和組織代碼。 父子組件通信 父組件可以通過 props 向子組件傳…

離線下載安裝TTS的步驟

要離線下載安裝 TTS 模塊&#xff0c;需要先在有網絡的環境下下載所有所需的依賴項&#xff0c;然后將這些文件轉移到目標環境中進行安裝。以下是具體步驟&#xff1a; 步驟 1&#xff1a;在有網絡的環境下下載依賴項 創建一個目錄來存放下載的包&#xff1a; mkdir TTS_deps下…

在線標注流程

文章目錄 在線標注流程標注方法 在線標注流程 登錄地址&#xff1a;http://7a27c5e078f644a2a9b734603913c65e.login.bce.baidu.com 出現頁面&#xff1a; 登錄名&#xff1a; 三個中任意一個 密碼&#xff1a;ZNSJ123a 登錄之后叉掉。再打開這個網站&#xff1a;https://…

【ZYNQ】CPU 私有定時器

Zynq 的每個 Cortex-A9 處理器都有自己的專用 32 位定時器和 32 位看門狗定時器&#xff0c;兩個處理器共享一個全局 64 位定時器&#xff0c;這些計時器的時鐘頻率始終為 CPU 頻率的 1/2。本文主要介紹 Zynq 芯片 CPU 私有定時器的工作特性&#xff0c;以及私有定時器的基本使…

selenium中,如何使用選擇框

html5 一個多選下拉框&#xff0c;沒有默認選 一個單選下拉狂&#xff0c;默認“張桐桐” <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>選擇框</title> </head> <body><l…

我是大學生,應該選系統運維方向,還是web開發方向?

選擇系統運維方向還是Web開發方向取決于你的興趣、職業目標和個人技能。以下是對這兩個方向的詳細對比和建議&#xff0c;幫助你做出更明智的選擇 雙方比較 &#x1f926;?♀?系統運維方向 優點&#xff1a; 穩定性&#xff1a;系統運維工作通常比較穩定&#xff0c;許多…

【Power Compiler手冊】5.Verilog翻轉活動示例

Verilog切換活動示例 以下示例展示了使用Verilog進行RTL(寄存器傳輸級)和門級描述時生成的切換活動數據。 RTL示例 這個Verilog RTL示例包括以下內容: RTL設計描述:定義了電路的功能和行為,但不涉及具體的門級實現細節。RTL測試臺(testbench):用于仿真和測試RTL設計…

【問題復盤】第三方接口變慢導致服務崩潰

一、事件經過 -1、一個不在公司的下午&#xff0c;接到客戶投訴&#xff0c;說平臺不能訪問了。 0、介入調查&#xff0c;發現服務器http請求無法訪問&#xff0c;https請求卻可以正常訪問&#xff0c;一時有些無法理解&#xff1b;&#xff08;后來發現&#xff0c;http和htt…

在gateway網關中使用feign遠程調用

由于 gateway 采用 spring-boot-starter-webflux 異步的 web 組件&#xff0c;該組件和 spring-boot-starter-web 有較大區別&#xff0c;我們的 openFeign 對 spring-boot-starter-web 比較契合&#xff0c;而對于 前者則需要做一些適配。 編寫如下配置類 SpringBootConfigur…

網絡編程(八)

網絡編程&#xff08;八&#xff09; 數據庫數據庫的分類基于嵌入式的數據庫什么是SQLite?為什么使用SQLite?sqlite3數據庫的安裝 sqlite3中的點命令.open 數據庫文件名字.tables [數據庫文件名].schema 表名.database.quit.head on.mode column SQLite數據庫中的數據類型SQL…

《混凝土壩安全監測資料整編規程》的深入解讀與實際應用

在水利工程中&#xff0c;混凝土壩作為重要的建筑物&#xff0c;其安全監測工作至關重要。為了確保監測工作的準確性和有效性&#xff0c;制定一套規范的混凝土壩安全監測資料整編規程顯得尤為重要。本文將對《混凝土壩安全監測資料整編規程》進行深入解讀&#xff0c;并探討其…