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

如何在Java中使用groupingBy按genres属性对电影列表进行分组

你可以通过将单条电影记录按所属genre拆分为多个「分类-电影」键值对,再按分类分组的方式实现需求,示例代码如下:

首先确保你用于接收接口数据的电影实体类结构如下(和你现有实体类字段、getter保持一致即可):

public class Movie {
    private String title;
    private List<String> genres;

    // 构造方法、setter自行补充
    public String getTitle() { return title; }
    public List<String> getGenres() { return genres; }
}

分组逻辑代码:

import java.util.*;
import java.util.stream.Collectors;
import java.util.AbstractMap.SimpleEntry;

// 从接口拿到的电影列表,已反序列化为List<Movie>类型
List<Movie> movieList = ...;

// 核心分组逻辑
Map<String, List<Movie>> groupedByGenre = movieList.stream()
    // 把单条电影按所属的所有分类拆成多个<分类, 电影>的键值对
    .flatMap(movie -> movie.getGenres().stream()
        .map(genre -> new SimpleEntry<>(genre, movie))
    )
    // 按分类分组,收集对应分类下的所有电影
    .collect(Collectors.groupingBy(
        Map.Entry::getKey,
        Collectors.mapping(Map.Entry::getValue, Collectors.toList())
    ));

如果要输出你示例里数组套对象的JSON格式,只需要把最终的Map放到单元素List中再序列化即可:

// 直接序列化result即可得到你要求的输出格式
List<Map<String, List<Movie>>> result = Collections.singletonList(groupedByGenre);

你之前使用reduce的思路是可行的,但需要提前初始化累加的Map容器,上述flatMap拆分再分组的写法是Java Stream实现这类多标签分组需求的常用方案,逻辑更清晰,也更容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:45:02