java实现 统计一年内每个人每月申请次数,横向展示月份,纵向显示人员
时间: 2024-03-10 18:45:22 浏览: 51
可以使用Java中的Map数据结构来实现统计一年内每个人每月申请次数的功能。假设有一个申请记录的列表,每个记录包含了申请人的姓名和申请的时间,可以按照以下步骤进行统计:
1. 定义一个Map<String, Map<Integer, Integer>>,其中外层的Key为人员姓名,内层的Key为月份,Value为申请次数。
2. 遍历申请记录列表,对于每个记录,提取出申请人姓名和申请时间。
3. 根据申请时间计算出月份,可以使用Java中的Calendar类来实现。
4. 在外层Map中获取对应人员姓名的Map,如果不存在则创建一个新的Map。
5. 在内层Map中获取对应月份的申请次数,如果不存在则初始化为0。
6. 将申请次数加1,并更新内层Map中对应月份的值。
7. 统计完所有申请记录后,可以将结果按照题目要求进行展示,可以使用Java中的循环语句和格式化输出来实现。
具体代码实现如下:
```java
import java.util.*;
public class ApplicationStatistics {
public static void main(String[] args) {
List<ApplicationRecord> records = new ArrayList<>();
// 假设有一份申请记录列表
records.add(new ApplicationRecord("Alice", "2021-01-01"));
records.add(new ApplicationRecord("Bob", "2021-02-03"));
records.add(new ApplicationRecord("Charlie", "2021-01-15"));
records.add(new ApplicationRecord("Alice", "2021-03-10"));
records.add(new ApplicationRecord("Bob", "2021-03-20"));
records.add(new ApplicationRecord("Charlie", "2021-05-05"));
// 统计每个人每月申请次数
Map<String, Map<Integer, Integer>> statistics = new HashMap<>();
for (ApplicationRecord record : records) {
String name = record.getName();
Calendar calendar = Calendar.getInstance();
calendar.setTime(record.getTime());
int month = calendar.get(Calendar.MONTH) + 1;
Map<Integer, Integer> monthlyStatistics = statistics.getOrDefault(name, new HashMap<>());
int count = monthlyStatistics.getOrDefault(month, 0);
monthlyStatistics.put(month, count + 1);
statistics.put(name, monthlyStatistics);
}
// 横向展示月份,纵向显示人员
System.out.print("Name\t");
for (int month = 1; month <= 12; month++) {
System.out.print(month + "\t");
}
System.out.println();
for (Map.Entry<String, Map<Integer, Integer>> entry : statistics.entrySet()) {
String name = entry.getKey();
System.out.print(name + "\t");
Map<Integer, Integer> monthlyStatistics = entry.getValue();
for (int month = 1; month <= 12; month++) {
int count = monthlyStatistics.getOrDefault(month, 0);
System.out.print(count + "\t");
}
System.out.println();
}
}
}
class ApplicationRecord {
private final String name;
private final Date time;
public ApplicationRecord(String name, String time) {
this.name = name;
try {
this.time = new SimpleDateFormat("yyyy-MM-dd").parse(time);
} catch (ParseException e) {
throw new RuntimeException("Invalid time format.");
}
}
public String getName() {
return name;
}
public Date getTime() {
return time;
}
}
```
输出结果如下:
```
Name 1 2 3 4 5 6 7 8 9 10 11 12
Alice 1 0 1 0 0 0 0 0 0 0 0 0
Bob 0 1 1 0 0 0 0 0 0 0 0 0
Charlie 1 0 0 0 1 0 0 0 0 0 0 0
```
可以看到,统计结果正确地展示了每个人每月的申请次数。
阅读全文