1

複数の列を持つテキスト ファイルを読み込んでおり、その情報を配列に格納しています

ファイルは次のようになります

Player   |   Team
---------| ---------
PlayerA  |  Team1
PlayerA  |  Team2
PlayerB  |  Team3
PlayerC  |  Team4
PlayerC  |  Team5

ご覧のとおり、各プレーヤーには複数のチームがあります。このファイルを 1 行ずつ読み込んで、ファイルの最後に 3 人のプレイヤー (A、B、C) のリストがあり、それぞれに対応するチームがあるようにしようとしています。

クラス:

Player - with Name and List<Team> (getter setter for both)
Team   - with Name (getter and setter)

Player クラスと Team クラスをいつ作成し、いつプレーヤー名が変更されたかを把握するロジックがわかりません。

4

2 に答える 2

0

通常、提案されたモデルの妥当性に疑問を呈することはありませんが、...チームが反対ではなく多くのプレーヤーを抱えているチームであるということは意味がありませんか?

とにかく、別のプレーヤー名で再び登場するチームがプレーヤー名を変更できないと仮定すると、次のようになります。

  BufferedReader input = ...;
  Map<String,Player> playersByName = new HashMap<String,Player>();

  String line;
  while ((line = input.readLine()) != null) {
     String playerName;
     String teamName;
     // code to parse the player and team names from 'line' comes here.

     Player player = playersByName.get(playerName);
     if (player == null)
       playersByName.put(playerName,player = new Player(playerName));

     Team team = new Team(teamName);
     if (!player.getTeams().contains(team)) 
        player.getTeams().add(team);
  }

このコードは、Playerコンストラクターがチームの空のリストを作成することを前提としています。

上記はリストを使用してプレーヤーのチームを保持することで機能しますがSet、プレーヤーが持つチームの数が非常に多い場合は、効率を上げるために代わりに使用することをお勧めします。その場合、最後の条件は必要ありません。直接追加できます。

Listまたは実装を完全に非表示Setにし、Playerクラス内でチームリストを安全に操作するための操作を追加すると、さらに効果的です。

(ハッシュされた)ソリューション(非表示または公開)を使用する場合は、クラス内の関数と関数を適切にSetオーバーライドする必要があることを忘れないでください(名前を委任すると非常にうまくいきます)。equalshashCodeTeam

于 2012-10-07T00:02:52.760 に答える
0

personandteamを 2 つのクラスPersonand Team..内にカプセル化できます。

次に、 を使用しMap<Person, List<Team>>て、各 Person のさまざまなチームを維持できます。

Map<Person, List<Team>> mapping = new HashMap<>();

// Read each line from file..

// Get Person and Team object..

// Assuming that you have your `Person` object in person and `Team` object in team

// You need a Comparator for `Person` class to check for `containment`..
if (mapping.contains(person)) {

    // Person already exist.. Update the list of Team he has
    mapping.get(person).add(team);

} else {

    // New entry.. create a new list.. and add it to map..
    List<Team> teamList = new ArrayList<>();
    teamList.add(team);
    mapping.put(person, teamList);
}

: -クラスを比較Comparatorするには、 が必要です。Person

私はあなたに作業するためのベースを与えたと思います..残りは回避策が必要です..オブジェクトにデータを入力する方法..コンパレーターを実装する方法..その他すべて..

于 2012-10-06T23:31:29.560 に答える