我正在阅读一个包含多列的文本文件,我将这些信息存储在一个数组中
文件看起来像这样
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类以及在玩家名称更改时保留帐户的逻辑
答案 0 :(得分:0)
您可以将person
和team
封装在两个类Person
和Team
中。
然后,您可以使用Map<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
才能进行比较..
我想我已经为你提供了一个工作基础..休息你需要解决方法..如何填充你的对象..如何实现Comparator ..以及所有......
答案 1 :(得分: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
解决方案(隐藏或公开),则需要在equals
中适当地覆盖hashCode
和Team
个功能class(在名称上委托它们会很好用)。