2012-10-06 65 views
1

我讀有多個列的文本文件,我存儲在數組與邏輯

文件看起來像這樣

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

正如你所看到的多列信息讀取文本文件每個球員有多個球隊。我試着逐行閱讀這個文件,這樣在文件末尾我有一個帶有三名球員(A,B和C)的List,並且每個球員都有相應的球隊。

類:

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

我想不出你可以封裝時創建球員和團隊班,並保持佔當玩家名稱已更改

+1

只是維護一張>的地圖,並繼續添加對象。 –

+0

我想用*創建*你實際上是指*實例化該類的一個對象......在這種情況下,你的意思是說玩家的名字可以改變嗎?在閱讀文件時可以更改嗎?例如。一個已經存在的球隊出現了不同的球員名字? –

+0

Player中的名字是字符串嗎? –

回答

0

邏輯您personteam兩類PersonTeam內..

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

注意: - 你需要有一個ComparatorPerson類進行比較..

我想我已經給過你的基礎在工作..休息,你需要的解決方法。 。如何填充你的對象..如何實現比較.. ..所有的..

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); 
    } 

的代碼假設玩家構造函數創建團隊的一個空列表。

雖然上面將使用列表來保存球員的球員我建議您使用Set而不是效率,如果球員擁有的球隊數量可以相當大。在這種情況下,你不需要最後的條件,你可以直接添加。

如果完全隱藏ListSet實現並添加操作以在Player類中安全地操作團隊列表,則更好。

Remeber,如果你使用一個(散列)Set溶液(隱藏或暴露的),你需要適當覆蓋equalshashCode功能在Team類(其中委託其名稱會工作得很好)。