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

如何通过Java Stream将Event列表转换为以EventId.id为键的Map

解决方案

可以通过Java Stream的Collectors.toMap()方法实现需求,具体代码如下:

List<Event> events;
Map<Long, Event> eventMap = events.stream()
    .collect(Collectors.toMap(
        event -> event.getId().getId(), // 以EventId中的id作为Map的键
        Function.identity(), // 直接将Event对象作为Map的值,等价于event -> event
        (existingEvent, newEvent) -> existingEvent // 处理键重复的情况:保留已有值,可根据需求修改
    ));

代码说明

  • event -> event.getId().getId():从每个Event对象中提取EmbeddedId(即EventId)里的id字段作为Map的键。
  • Function.identity():简化写法,代表直接使用Event对象本身作为Map的值,和event -> event效果一致。
  • 第三个参数是可选的冲突处理函数:如果列表中存在多个Event对应同一个EventId.id,这个函数会决定保留哪个值。示例中选择保留先出现的对象,你也可以改成(existing, new) -> new来保留后出现的对象,或者自定义其他逻辑。

如果能保证列表中所有EventId.id都是唯一的,也可以省略第三个参数,简化为:

Map<Long, Event> eventMap = events.stream()
    .collect(Collectors.toMap(
        event -> event.getId().getId(),
        Function.identity()
    ));

注意:如果省略冲突处理函数且存在重复键,会抛出IllegalStateException异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:22:03