[英]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类并记下何时更改玩家名称的逻辑
您可以封装你的person
和team
内部两类Person
和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
来Comparator
您的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
代替,以提高球员的效率。 在这种情况下,您不需要最后一个条件,则可以直接添加。
如果您完全隐藏List
或Set
实现,并在Player类中添加操作以安全地操纵团队列表,那就更好了。
请记住,如果使用(隐藏的) Set
解决方案(隐藏的或公开的),则需要在Team
类中适当覆盖equals
和hashCode
函数(以它们的名称进行委派将非常有效)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.