try 合并两个数据,一个用于电影,另一个用于流派,只有在这两个属性的ID相同的情况下.

两者都有id,名字段,请考虑电影中的id是PK,流派使用它作为FK 如下图所示.

  List<Movie> movies = new ArrayList<>();
        movies.add(new Movie(1, "Titanic"));
        movies.add(new Movie(2, "Batman"));
        movies.add(new Movie(3, "Silence of the Lambs"));
        movies.add(new Movie(4, "1917"));
        movies.add(new Movie(5, "Fight Club"));
        movies.add(new Movie(6, "Inception"));
        movies.add(new Movie(7, "The Godfather"));
        movies.add(new Movie(8, "Peral Harbor"));

        List<Genres> genres = new ArrayList<>();
        genres.add(new Genres(1, "Drama"));
        genres.add(new Genres(4, "Drama"));
        genres.add(new Genres(8, "Drama"));
        genres.add(new Genres(7, "Drama"));
        genres.add(new Genres(2, "Action"));
        genres.add(new Genres(5, "Action"));
        genres.add(new Genres(6, "SF"));
        genres.add(new Genres(3, "Thriller"));
        genres.add(new Genres(5, "Thriller"));
        genres.add(new Genres(5, "Crime"));
        genres.add(new Genres(16, "Comedy"));
        genres.add(new Genres(3, "Horror"));
        genres.add(new Genres(1, "Disaster"));
        genres.add(new Genres(7, "Noir"));
        genres.add(new Genres(1, "Romance"));
                       ...

我想把他们联系在一起,如果ID是相等的,并把流派array.

结果应该如下所示:

result: [
                {"id": 1, "name": "Titanic", "genres": ["Drama", "Disaster", "Romance"] },
                                                  ...
                {"id": 5, "name": "Fight Club", "genres": ["Action", "Thriller", "Crime"] },

        ]

几乎没有使用Stream的 idea ,也可能不使用.

先谢谢你.

推荐答案

对于基本的代码(目前无法访问我的IDE),很抱歉,但以下是我处理它的方法.

首先,使用包含流派的字符串列表扩展您的Movie类.

class Movie {
        int id;
        String name;
        List<String> genres;
        
        Movie(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }
    
class Genres {
        int id;
        String name;
        
        Genres(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }

其次,根据ID对你的流派列表进行分组:

Map<Integer, List<Genres>> genresGroupedById = genres.stream().collect(Collectors.groupingBy(g -> g.id));

最后,遍历您的电影列表并分配适当的类型,如下所示:

movies.forEach(m -> m.genres = genresGroupedById.get(m.id).stream().map(g -> g.name).collect(Collectors.toList()));

这应该会让您开始让代码更干净一些.:)

Java相关问答推荐

在applitcation.properties中找到的字符串中输入变量

Maven Google Sheets版本问题

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

Java在模块化jar文件中找不到类,但是javap可以

当一个链表中间有一个循环时,它的松散部分会发生什么?

如何在Javascript中设置文本区域圆角的样式

ApachePOI:不带换行的新行

使用动态ID从json获取详细信息的Jolt规范

是否在允许数组元素为空时阻止 idea 为空性警告?

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

当涉及到泛型时,类型推理在Java中是如何工作的?

在向WebSphere中的文档添加元素时iText挂起

如何在@CsvSource中传递空格作为值

IntelliJ IDEA依赖项工具窗口丢失

如何生成指定范围内的11位序列号?

如何在运行docker的应用程序中获取指定的配置文件

循环不起作用只有第一个元素重复

升级版本后出现非法访问错误

如何用Micrometer&;斯普肯

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题