2017-12-20 4 views
0

ich zwei Objekte, die in Arrays gespeichert werden:java, wie Variablen aus einer Zeichenfolge zu einem Objekt hinzufügen

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

Game(creator) mehrere Schöpfer hat, so als String wie folgt gespeichert wird: "creator1, creator2, creator3" mit Kommas Trennen Sie ihre Werte.

Nicht alle Spiele haben mehrere Ersteller und es gibt nicht viele verschiedene Ersteller insgesamt.

Was ich zu tun versuche, ist eine Schleife durch eine Reihe von Game(games) und einen Schöpfer Variable daraus extrahiert und weist es die Creator(name) und dann alle Spiele überein, dass Schöpfer in erwähnt werden und diese Titel Variablen Creator(gamesWorkedOn) zuweisen.

Bisher habe ich dies:

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

Was mir diesen Ausgang mit einem SYSOUT gibt:

Shigeru Miyamoto 
Satoshi Tajiri 
Yoshiaki Koizumi 
Koichi Hayashida 
Shigeru Miyamoto 

Meine gewünschte Ausgabe, so etwas zu haben wäre:

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

Ich schaue mit einer for-Schleife, bin aber unsicher, wie Sie es hier implementieren.

Edit:

Ich habe vergessen, ein paar Details zu erwähnen, dass ich nicht wichtig waren dachte, aber ich werde jetzt ein wenig klarer. Dies ist ein Swing-basiertes Projekt, an dem ich arbeite, das Benutzereingaben nimmt und diese Arrays speichert, die dann in einer JSON-Datei gespeichert werden, die beim Laden der Anwendung gelesen wird und wenn ein Benutzer auf die Schaltfläche "Speichern" klickt.

+1

Warum arbeiten Sie überhaupt mit Strings, wenn Sie bereits Klassen haben? Warum hat die Game-Klasse keinen 'Creator Creator' oder' List Creators' statt 'String Creator' und warum hat der Creator keine' gamesWorkedOn' statt 'String gamesWorkedOn'? Diese Attribute als Strings zu speichern und sie ständig in die eigentlichen Klassen zu konvertieren, ist kein wirklich gutes Design. –

+0

Es scheint, dass Sie sich über objektorientiertes Design informieren müssen ... – Synch

+0

@OHGODSPIDERS Ich denke, der Grund dafür war, dass es für mich damals der einfachste Weg war, mit diesen Strings umzugehen, um in einer JSON-Datei zu speichern (etwas, das ich in der Post hätte erwähnen sollen). Der Schöpfer-Kurs wurde von mir selbst in letzter Minute gemacht, da ich nicht erwartet hatte, es zu brauchen. Im Moment habe ich Spiele perfekt in einer JSON-Datei gespeichert und kann problemlos in mein Swing-Projekt geladen werden (wenn auch mit schlechtem Design). –

Antwort

1

Was Sie zu tun scheinen, ist die Zuordnung der Ersteller zu allen Spielen, die sie erstellt oder mitgestaltet haben. Ich beginne damit, eine vereinfachte Version des Problems zu erstellen.

Sie haben eine Liste von:

class Game { 
     Set<Creator> creators; 
    } 

, die Sie konvertieren möchten:

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

Das erste, was hier zu tun ist, um alle die einzigartigen Schöpfer zu finden, um die damit zu beginnen Karte. Dies kann mit der Stream-API erfolgen.

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

Jetzt können Sie nur eine Schleife durch alle Spiele wieder und fügen Sie das Spiel auf einem Set Schöpfer, wenn sie an der Schaffung dieses Spiel nahm.

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