Java计算集合的组内平均值
在Java编程中,经常需要对集合中的数据进行统计和计算,计算组内平均值是常见的一种操作。本文将介绍如何使用Java计算集合中的组内平均值,并提供多个方法和示例代码。
一、使用传统循环计算平均值
1.1 基本思路
通过遍历集合中的元素,计算总和并计数,最后计算平均值。
1.2 示例代码
import java.util.Arrays;
import java.util.List;
public class GroupAverage {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
double average = calculateAverage(numbers);
System.out.println("平均值:" + average);
}
public static double calculateAverage(List<Integer> list) {
double sum = 0.0;
for (int number : list) {
sum += number;
}
return sum / list.size();
}
}
1.3 说明
- 优点:实现简单,易于理解和使用。
- 缺点:代码较为冗长,不够简洁。
二、使用Java 8 Stream API
2.1 基本思路
利用Java 8引入的Stream API,通过流操作简洁地计算平均值。
2.2 示例代码
import java.util.Arrays;
import java.util.List;
public class GroupAverage {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
double average = numbers.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0.0);
System.out.println("平均值:" + average);
}
}
2.3 说明
- 优点:代码简洁,利用Stream API提高可读性和开发效率。
- 缺点:需要Java 8及以上版本。
三、分组计算平均值
3.1 基本思路
使用 Collectors.groupingBy
和 Collectors.averagingDouble
等方法对集合进行分组,并计算每组的平均值。
3.2 示例代码
假设有一个包含多个学生成绩的集合,每个学生属于不同的班级,计算每个班级的平均成绩。
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Student {
String name;
String grade;
double score;
Student(String name, String grade, double score) {
this.name = name;
this.grade = grade;
this.score = score;
}
public String getGrade() {
return grade;
}
public double getScore() {
return score;
}
}
public class GroupAverage {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", "A", 85),
new Student("Bob", "A", 90),
new Student("Charlie", "B", 75),
new Student("David", "B", 80),
new Student("Eve", "A", 95)
);
Map<String, Double> averageScores = students.stream()
.collect(Collectors.groupingBy(
Student::getGrade,
Collectors.averagingDouble(Student::getScore)
));
averageScores.forEach((grade, avgScore) ->
System.out.println("班级 " + grade + " 的平均成绩是: " + avgScore));
}
}
3.3 说明
- 优点:适合对集合进行分组统计,代码简洁。
- 缺点:需要Java 8及以上版本。
四、使用第三方库Apache Commons Collections
4.1 基本思路
利用Apache Commons Collections库中的 CollectionUtils
进行统计计算。
4.2 示例代码
首先,添加Maven依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
然后,使用以下代码进行计算:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class GroupAverage {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
double average = calculateAverage(numbers);
System.out.println("平均值:" + average);
}
public static double calculateAverage(Collection<Integer> collection) {
Transformer<Integer, Double> transformer = new Transformer<Integer, Double>() {
@Override
public Double transform(Integer input) {
return input.doubleValue();
}
};
return CollectionUtils.average(collection, transformer);
}
}
4.3 说明
- 优点:利用成熟的第三方库,代码简洁。
- 缺点:需要引入额外的库依赖。
五、使用Guava库
5.1 基本思路
利用Guava库中的 Lists
和 Stats
类进行统计计算。
5.2 示例代码
首先,添加Maven依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
然后,使用以下代码进行计算:
import com.google.common.math.Stats;
import java.util.Arrays;
import java.util.List;
public class GroupAverage {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
double average = Stats.meanOf(numbers);
System.out.println("平均值:" + average);
}
}
5.3 说明
- 优点:利用Guava库,代码简洁,统计功能强大。
- 缺点:需要引入额外的库依赖。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现