实现 Java 数组 group by sum 的流程
1. 准备数据
首先需要准备一个包含元素的数组作为输入数据。假设我们有一个包含学生姓名和对应成绩的数组,如下所示:
姓名 | 成绩 |
---|---|
张三 | 80 |
李四 | 70 |
王五 | 90 |
张三 | 85 |
王五 | 95 |
2. 创建一个 Map 对象
我们可以使用 Java 中的 HashMap 类来创建一个空的 Map 对象,用于存储分组后的结果。Map 的 key 用于存储分组的依据,value 用于存储分组后的结果。在这个例子中,我们可以使用姓名作为分组的依据,将每个姓名对应的成绩进行累加。
Map<String, Integer> resultMap = new HashMap<>();
3. 遍历数组
使用 for 循环遍历数组中的每一个元素,对每个元素进行分组和累加操作。
for (int i = 0; i < array.length; i++) {
// 分组和累加操作
}
4. 获取当前元素的分组依据
对于当前遍历到的元素,需要获取它的分组依据(在这个例子中即姓名)。
String key = array[i].getName();
5. 判断分组依据是否已存在于 Map 中
使用 containsKey() 方法判断当前分组依据是否已存在于 Map 中。
if (resultMap.containsKey(key)) {
// 已存在,进行累加操作
} else {
// 不存在,添加新的分组
}
6. 累加操作
如果分组依据已存在于 Map 中,需要将当前元素的值累加到已有的值上。
int sum = resultMap.get(key) + array[i].getScore();
resultMap.put(key, sum);
7. 添加新的分组
如果分组依据不存在于 Map 中,说明是第一次遇到这个分组,需要将当前元素的值作为初始值添加到 Map 中。
resultMap.put(key, array[i].getScore());
8. 输出结果
遍历完整个数组后,可以将最终的分组结果输出。
for (Map.Entry<String, Integer> entry : resultMap.entrySet()) {
System.out.println("姓名: " + entry.getKey() + ", 总成绩: " + entry.getValue());
}
完成上述步骤后,就能够得到按照姓名分组并累加成绩的结果。
完整代码如下所示:
import java.util.HashMap;
import java.util.Map;
public class GroupBySumExample {
public static void main(String[] args) {
Student[] array = {
new Student("张三", 80),
new Student("李四", 70),
new Student("王五", 90),
new Student("张三", 85),
new Student("王五", 95)
};
Map<String, Integer> resultMap = new HashMap<>();
for (int i = 0; i < array.length; i++) {
String key = array[i].getName();
if (resultMap.containsKey(key)) {
int sum = resultMap.get(key) + array[i].getScore();
resultMap.put(key, sum);
} else {
resultMap.put(key, array[i].getScore());
}
}
for (Map.Entry<String, Integer> entry : resultMap.entrySet()) {
System.out.println("姓名: " + entry.getKey() + ", 总成绩: " + entry.getValue());
}
}
}
class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
以上就是实现 Java 数组 group by sum 的完整流程,希望能够帮助到你。