我有两个存储在数组中的对象:
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文件中,该文件在加载应用程序时以及用户单击“保存”按钮时读取。
您似乎想要做的是将创建者映射到他们创建或帮助创建的所有游戏。我将首先创建问题的简化版本。
你有一个清单:
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);
}
}
}