一、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-tw/n/370588.html