You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何用groupingBy()从Stream创建Map并按小时分组

按LocalDateTime小时分组的正确写法

你原来的代码语法错误,因为方法引用不支持链式调用,x::t.getHour这种写法不符合Java方法引用的规范。可以用以下两种方式解决:

方式一:使用Lambda表达式(推荐)

如果类x的属性t有对应的getter方法(比如getT()),可以这样写:

Map<Integer, List<x>> m = stream.collect(Collectors.groupingBy(element -> element.getT().getHour()));

如果t是public权限的字段,直接访问即可:

Map<Integer, List<x>> m = stream.collect(Collectors.groupingBy(element -> element.t.getHour()));

方式二:提取分组逻辑为单独方法

如果分组逻辑需要复用,可以单独写一个方法,再用方法引用:

// 定义分组用的方法
private static int extractHour(x element) {
    return element.getT().getHour(); // 或者 element.t.getHour()
}

// 调用时使用方法引用
Map<Integer, List<x>> m = stream.collect(Collectors.groupingBy(YourClass::extractHour));

补充说明

LocalDateTime的getHour()方法返回0-23的整数,刚好可以作为Map的key实现按小时分组。如果需要基于特定时区的小时(比如UTC),可以先转换为ZonedDateTime再提取小时:

Map<Integer, List<x>> m = stream.collect(Collectors.groupingBy(element -> 
    element.getT().atZone(ZoneId.of("UTC")).getHour()
));

内容的提问来源于stack exchange,提问作者Cata Lebedina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:25:43