我有一个MoveTrack
对象的列表,我想按月分组,然后将数据计数并存储在Map<String, Double>
中。我正在尝试学习Lambda并进行实验,因此尝试使用Lambda完成此任务。
class MoveTrack {
private Date time;
private Double movementAmount;
//getters and setters
}
// in my main method
List<MoveTrack> mveTracking = new ArrayList<>();
Map<String, Double> movMap = new HashMap<>();
因此,我希望能够对
moveTracking
列表进行分组,并将这些值求和到movMap
中,每个Map Key =月名称(一月,二月等)和相应的Value就是该月的两倍移动量。 最佳答案
Collectors.groupingBy
允许您将列表缩减为 map ,其中键是对列表元素的某种操纵,而值是应用于该元素的某种聚合函数。
在您的情况下,您可以使用以下方式:
SimpleDateFormat monthFormatter = new SimpleDateFormat("MMM");
Map<String, Double> moveMap =
moveTracking.stream()
.collect(Collectors.groupingBy
(m -> monthFormatter.format(m.getTime()),
Collectors.summingDouble(MoveTrack::getMovementAmount)));