首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java8中通过流对Map对象进行按时间段求和?

在Java8中,我们可以使用流对Map对象进行按时间段求和。下面是一个实现的示例代码:

代码语言:txt
复制
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对象,其中包含了时间和对应的数值。然后,我们使用流的groupingBysummingInt方法对Map对象进行按时间段求和。具体来说,groupingBy方法将Map的键按照时间戳进行分组,并使用truncatedTo方法将时间戳的精度缩小到小时级别。然后,summingInt方法对每个时间段内的数值进行求和。最后,我们通过遍历结果Map,输出每个时间段的求和结果。

请注意,这只是一个示例代码,实际使用时,你需要根据自己的数据结构和业务逻辑进行相应的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Java8 新特性

    Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以取代大部分的匿名内部类,可以写出更简洁、更灵活的代码。尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到提升。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。 【1】从匿名类到 Lambda 的转换:虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。

    01
    领券