java如何从字符串

时间:2017-12-20 12:23:35

标签: java string loops

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

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文件中,该文件在加载应用程序时以及当用户单击“保存”按钮时读取。

1 个答案:

答案 0 :(得分: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);
            }
        }
    }