在Java8中,我们可以使用流对Map对象进行按时间段求和。下面是一个实现的示例代码:
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class MapSumByTime {
public static void main(String[] args) {
// 创建一个包含时间和数值的示例Map对象
Map<LocalDateTime, Integer> map = new HashMap<>();
map.put(LocalDateTime.of(2022, 1, 1, 10, 0), 100);
map.put(LocalDateTime.of(2022, 1, 1, 11, 0), 200);
map.put(LocalDateTime.of(2022, 1, 1, 12, 0), 300);
map.put(LocalDateTime.of(2022, 1, 2, 10, 0), 400);
map.put(LocalDateTime.of(2022, 1, 2, 11, 0), 500);
map.put(LocalDateTime.of(2022, 1, 2, 12, 0), 600);
// 按照时间段进行求和
Map<LocalDateTime, Integer> sumByTime = map.entrySet().stream()
.collect(Collectors.groupingBy(entry -> entry.getKey().truncatedTo(ChronoUnit.HOURS),
Collectors.summingInt(Map.Entry::getValue)));
// 输出结果
sumByTime.forEach((time, sum) -> System.out.println("时间:" + time + " 求和:" + sum));
}
}
这段代码中,我们首先创建了一个示例的Map对象,其中包含了时间和对应的数值。然后,我们使用流的groupingBy
和summingInt
方法对Map对象进行按时间段求和。具体来说,groupingBy
方法将Map的键按照时间戳进行分组,并使用truncatedTo
方法将时间戳的精度缩小到小时级别。然后,summingInt
方法对每个时间段内的数值进行求和。最后,我们通过遍历结果Map,输出每个时间段的求和结果。
请注意,这只是一个示例代码,实际使用时,你需要根据自己的数据结构和业务逻辑进行相应的调整。
领取专属 10元无门槛券
手把手带您无忧上云