深入淺出JavaGroupBy

一、JavaGroupBy簡介

1、JavaGroupBy是什麼


JavaGroupBy是Java語言中的一種函數式編程的API,可以方便地實現數據分組操作。

2、JavaGroupBy的作用


JavaGroupBy通常用於將一個數據集按照某一特定屬性分組,然後進行統計匯總或者其他操作。

3、JavaGroupBy的優勢


JavaGroupBy使用方便、可讀性好、易於維護和擴展。

二、JavaGroupBy使用詳解

1、使用groupingBy進行分組

JavaGroupBy的核心組件是groupingBy方法,該方法返回一個Collectors類型的對象,可以對數據進行分組處理。

首先,我們可以通過以下代碼創建一個Student類:


public class Student {
    private String name;
    private String grade;
    private int score;

    public Student(String name, String grade, int score) {
        this.name = name;
        this.grade = grade;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public String getGrade() {
        return grade;
    }

    public int getScore() {
        return score;
    }

    // 省略Getter和Setter方法
}

接下來,我們可以通過以下代碼進行分組操作:


List<Student> students = new ArrayList<>();
students.add(new Student("小明", "一年級", 80));
students.add(new Student("小王", "二年級", 85));
students.add(new Student("小張", "一年級", 90));
students.add(new Student("小李", "三年級", 95));

Map<String, List<Student>> groupByGrade = students.stream()
        .collect(Collectors.groupingBy(Student::getGrade));

以上代碼將輸入的學生列表按照年級分組,返回一個Map<String, List<Student>>的對象,其中鍵是年級,值是該年級下的學生列表。

2、使用groupingBy和summingInt進行分組求和

我們可以通過summingInt方法對分組後的數據進行求和:


Map<String, Integer> groupByGradeSumScore = students.stream()
        .collect(Collectors.groupingBy(Student::getGrade, Collectors.summingInt(Student::getScore)));

以上代碼將分組後的每個學生分數求和,並且返回一個Map<String, Integer>的對象,其中鍵是年級,值是該年級下所有學生的分數之和。

3、使用groupingBy和averagingInt進行分組平均值計算

我們可以通過averagingInt方法對分組後的數據進行平均值計算:


Map<String, Double> groupByGradeAverageScore = students.stream()
        .collect(Collectors.groupingBy(Student::getGrade, Collectors.averagingInt(Student::getScore)));

以上代碼將分組後的每個學生分數求平均值,並且返回一個Map<String, Double>的對象,其中鍵是年級,值是該年級下所有學生的分數平均值。

4、使用groupingBy和maxBy進行分組最大值計算

我們可以通過maxBy方法對分組後的數據進行最大值計算:


Map<String, Optional<Student>> groupByGradeMaxScore = students.stream()
        .collect(Collectors.groupingBy(Student::getGrade,
                Collectors.maxBy(Comparator.comparingInt(Student::getScore))));

以上代碼將分組後的每個學生分數求最大值,並且返回一個Map<String, Optional<Student>>的對象,其中鍵是年級,值是該年級下分數最高的學生列表。

5、使用groupingBy和mapping進行分組後轉換

我們可以通過mapping方法對分組後的數據進行轉換操作:


Map<String, List<String>> groupByGradeStudentNames = students.stream()
        .collect(Collectors.groupingBy(
                Student::getGrade, 
                Collectors.mapping(Student::getName, Collectors.toList())));

以上代碼將分組後的每個學生列錶轉換為學生名字列表,並且返回一個Map<String, List<String>>的對象,其中鍵是年級,值是該年級下學生的名字列表。

三、JavaGroupBy的運用場景

JavaGroupBy適用於各種分組操作,比如統計數據、計算數據、匯總報表等,具有廣泛的應用場景。

四、JavaGroupBy的注意事項

1、JavaGroupBy方法返回的是一個Map類型,因此需要進行類型轉換。

2、JavaGroupBy方法中的按鍵分組操作需要有一個鍵值,否則無法進行分組。

五、總結

JavaGroupBy是Java語言中非常實用的函數式編程API之一,可以通過一些簡單的操作來實現數據分組、統計和計算功能。在實際應用中,我們可以根據具體的需求靈活使用JavaGroupBy,實現複雜的業務邏輯。

原創文章,作者:YJLFH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370588.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YJLFH的頭像YJLFH
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相關推薦

  • 深入淺出統計學

    統計學是一門關於收集、分析、解釋和呈現數據的學科。它在各行各業都有廣泛應用,包括社會科學、醫學、自然科學、商業、經濟學、政治學等等。深入淺出統計學是指想要學習統計學的人能夠理解統計…

    編程 2025-04-25
  • 深入淺出torch.autograd

    一、介紹autograd torch.autograd 模塊是 PyTorch 中的自動微分引擎。它支持任意數量的計算圖,可以自動執行前向傳遞、後向傳遞和計算梯度,同時提供很多有用…

    編程 2025-04-24
  • 深入淺出SQL佔位符

    一、什麼是SQL佔位符 SQL佔位符是一種佔用SQL語句中某些值的標記或佔位符。當執行SQL時,將使用該標記替換為實際的值,並將這些值傳遞給查詢。SQL佔位符使查詢更加安全,防止S…

    編程 2025-04-24
  • 深入淺出:理解nginx unknown directive

    一、概述 nginx是目前使用非常廣泛的Web服務器之一,它可以運行在Linux、Windows等不同的操作系統平台上,支持高並發、高擴展性等特性。然而,在使用nginx時,有時候…

    編程 2025-04-24
  • 深入淺出ThinkPHP框架

    一、簡介 ThinkPHP是一款開源的PHP框架,它遵循Apache2開源協議發布。ThinkPHP具有快速的開發速度、簡便的使用方式、良好的擴展性和豐富的功能特性。它的核心思想是…

    編程 2025-04-24
  • 深入淺出arthas火焰圖

    arthas是一個非常方便的Java診斷工具,包括很多功能,例如JVM診斷、應用診斷、Spring應用診斷等。arthas使診斷問題變得更加容易和準確,因此被廣泛地使用。artha…

    編程 2025-04-24
  • 深入淺出AWK -v參數

    一、功能介紹 AWK是一種強大的文本處理工具,它可以用於數據分析、報告生成、日誌分析等多個領域。其中,-v參數是AWK中一個非常有用的參數,它用於定義一個變量並賦值。下面讓我們詳細…

    編程 2025-04-24
  • 深入淺出Markdown文字顏色

    一、Markdown文字顏色的背景 Markdown是一種輕量級標記語言,由於其簡單易學、易讀易寫,被廣泛應用於博客、文檔、代碼注釋等場景。Markdown支持使用HTML標籤,因…

    編程 2025-04-23
  • 深入淺出runafter——異步任務調度器的實現

    一、runafter是什麼? runafter是一個基於JavaScript實現的異步任務調度器,可以幫助開發人員高效地管理異步任務。利用runafter,開發人員可以輕鬆地定義和…

    編程 2025-04-23
  • 深入淺出TermQuery

    一、TermQuery概述 TermQuery是Lucene中最基本、最簡單、最常見的查詢方法之一。它完全符合其名字,意味着只能對一個單詞進行查詢。 TermQuery可以用於搜索…

    編程 2025-04-23

發表回復

登錄後才能評論