1

我正在阅读一个包含多列的文本文件,并将信息存储在一个数组中

文件看起来像这样

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

如您所见,每个玩家都有多个团队。我正在尝试逐行读取此文件,以便在文件末尾有一个包含三名球员(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尽管上面的方法可以使用列表来保存玩家的团队,但如果该玩家拥有的团队数量可能很大,我建议您使用 a代替以提高效率。在这种情况下,您不需要最后一个条件,您可以直接添加。

List如果您完全隐藏orSet实现并添加操作以在 Player 类中安全地操作团队列表,那就更好了。

请记住,如果您使用(散列)Set解决方案(隐藏或公开),则需要在类中适当地覆盖equalsandhashCode函数Team(将它们委托给它的名称会很好)。

于 2012-10-07T00:02:52.760 回答
0

您可以将您的personand封装team在两个类中Person,并且Team..

然后,您可以使用 aMap<Person, List<Team>>为每个人维护各种团队。

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 回答