这是班级MonitoredData
:
class MonitoredData {
public MonitoredData (DateTime startTime, DateTime endTime, String activity){
this.startTime = startTime;
this.endTime = endTime;
this.activity = activity;
}
public DateTime getStartTime(){
return this.startTime;
}
public DateTime getEndTime(){
return this.endTime;
}
public String getActivity (){
return this.activity;
}
}
我有一个返回MonitoredData
列表的方法,我必须生成类型Map<Integer, Map<String, Integer>>
的数据结构,其中包含日志每天的活动计数。
public void activitiesPerDay(List<MonitoredData> monitoredData) {
Map <Integer, Map<String, Integer>> map = monitoredData.stream()
.collect(Collectors.groupingBy(
element -> element.getStartTime().dayOfMonth()),
Collectors.mapping(mapper, downstream)
);
}
答案 0 :(得分:1)
看起来你需要一个嵌套的groupingBy
- 首先是每月一天,然后是活动:
Map<Integer, Map<String, Long>> map =
monitoredData.stream()
.collect(Collectors.groupingBy (
e -> e.getStartTime().dayOfMonth(),
Collectors.groupingBy(MonitoredData::getActivity,
Collectors.counting())));
请注意,输出类型为Map<Integer, Map<String, Long>>
而非Map<Integer, Map<String, Integer>>
,因为我使用Collectors.counting()
,返回Long
。
您可以使用Collectors.summingInt(e -> 1)
代替Collectors.counting()
获取Integer
计数,这将为您提供Map<Integer, Map<String, Integer>>
输出。