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

问题描述 投票:0回答:1

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

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");

这使用sysout给我这个输出:

Shigeru Miyamoto
Satoshi Tajiri
Yoshiaki Koizumi
Koichi Hayashida
Shigeru Miyamoto

我想要的输出是这样的:

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

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

编辑:

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

java string loops
1个回答
1
投票

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

你有一个清单:

    class Game {
        Set<Creator> creators;
    }

你要转换为:

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

这里要做的第一件事是找到所有独特的创作者开始添加到地图。这可以使用流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);
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.