繁体   English   中英

使用逻辑读取多列文本文件

[英]Reading text file with multiple columns with logic

我正在读取具有多列的文本文件,并将信息存储在数组中

文件看起来像这样

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类并记下何时更改玩家名称的逻辑

您可以封装你的personteam内部两类PersonTeam ..

然后,您可以使用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);
}

注意 :-您需要ComparatorComparator您的Person类。

我想我为您提供了一个基础。.休息,您需要解决方法..如何填充您的对象..如何实现Comparator ..以及所有这些。

通常,我不会质疑所提出的模型的有效性,但是...更有意义的是团队是拥有很多球员而不是相反的球队吗?

无论如何,假设无法用另一个球员名称再次出现的球队改变球员名称:

  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代替,以提高球员的效率。 在这种情况下,您不需要最后一个条件,则可以直接添加。

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

请记住,如果使用(隐藏的) Set解决方案(隐藏的或公开的),则需要在Team类中适当覆盖equalshashCode函数(以它们的名称进行委派将非常有效)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM