gpt4 book ai didi

java 如何从字符串向对象添加变量

转载 作者:行者123 更新时间:2023-12-02 11:50:30 26 4
gpt4 key购买 nike

我有两个对象存储在数组中:

Game(String creator, String title, int releaseYear, int NumberSold)  
Creator(String name, String gamesWorkedOn)

Game(creator)有多个创建者,因此存储为如下字符串:"creator1, creator2, creator3"使用逗号分隔它们的值。

并非所有游戏都有多个创作者,而且不同的创作者总数也不多。

我想做的是循环遍历 Game(games) 数组并从中提取创建者变量并将其分配给 Creator(name)然后匹配创建者中提到的任何游戏,并将这些标题变量分配给 Creator(gamesWorkedOn) .

到目前为止我有这个:

public static void PopulateCreators(ArrayList<Game> games) {
//populating an array of Creators with games they have worked on
boolean match = false;
String thisCreator;
String gamesWorkedOn;

ArrayList<Creator> creatorArray = new ArrayList<Creator>();

for (int i = 0; i < games.size(); i++) {
thisCreator = games.get(i).getGameCreator();
thisCreator = thisCreator.replaceAll(", ", "\n");

这使用系统输出给了我这个输出:

Shigeru Miyamoto
Satoshi Tajiri
Yoshiaki Koizumi
Koichi Hayashida
Shigeru Miyamoto

我想要的输出是这样的:

name = "Shigeru Miyamoto"
gamesWorkedOn = "game1, game2, game3"

我正在考虑使用 for 循环,但不确定如何在这里实现它。

编辑:

我忘记提及一些我认为不重要的细节,但现在我会更清楚一点。这是我正在开发的一个基于 Swing 的项目,它接受用户输入并存储这些数组,然后将这些数组保存到 JSON 文件中,该文件在加载应用程序以及用户单击“保存”按钮时读取。

最佳答案

您似乎想要做的是将创作者映射到他们创建或帮助创建的所有游戏。我将首先创建问题的简化版本。

您有以下内容的列表:

    class Game {
Set<Creator> creators;
}

您想要转换为:

    Map<Creator, Set<Game>> createdGames; // Map of creator name to games created

这里要做的第一件事是找到所有独特的创作者并开始添加到 map 中。这可以通过流 API 来完成。

    createdGames = gameList.stream().flatMap(game -> game.creators.stream()).distinct().collect(Collectors.toMap(Function.identity(), v -> new HashSet<>()));

现在,您可以再次循环浏览所有游戏,并将游戏添加到创建者的集合中(如果他们参与了该游戏的创建)。

    for(Game game : gameList) {
for(Creator creator : createdGames.keySet()) {
if(game.creators.contains(creator)) {
createdGames.get(creator).add(game);
}
}
}

关于java 如何从字符串向对象添加变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47906019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com