2017-05-20 6 views
0

私は文字列とマップのマップを持っています。内側のマップの中の値を変更したいのですが、その方法を見つけることができませんでした。インナーマップ内の特定の値に到達して変更するにはどうすればよいですか?ここ地図の地図に値を変更するにはどうすればよいですか?

は私のマップです:

String teamName; 

Map<String, Integer> players = new HashMap<String,Integer>(); 

Map<String, Map> teams = new HashMap<String, Map>(); 

teams.put(teamName, players); 

私は選手たちがチームマップからマップ内でこの整数値を増減します。しかし、残りのコードのために選手の地図を直接使用することはできません。私はチームマップからそれに到達する必要があります。

+0

外側の地図の中の1つの地図 - これで何をモデリングしていますか? –

答えて

1

あなたがする必要があることは、適切なチームのマップにアクセスし、番号を設定することだけです。

それはあなたが全体でジェネリックを使用する場合に役立ちます。

String teamName = "someteam"; 
Map<String, Integer> players = new HashMap<String,Integer>(); 
Map<String, Map<String, Integer>> teams = new HashMap<String, Map<String, Integer>>(); 
teams.put(teamName, players); 

とキーとしてteamNameとチームの選手の数を変更するには:入れてもらうマップと

teams.get(teamName).put("somename", 123); 
//Or to directly overwrite with an increment: 
int currentValue = teams.get(teamName).get("somename"); 
teams.get(teamName).put("somename", currentValue + 1); 
+0

Nice answer;)しかし、2行目と3行目を '... = new HashMap <>()'に単純化することはできませんか? –

+0

@PauloMattos:それは可能ですが、ユーザーがJava 7以上で構築していると仮定しています。しかし同意して、それは良いでしょう。 –

0

注意が必要ですyyour独自のクラスを定義する必要がありますが、これはあなたが求めているものの例です:

Map<String, Integer> players = new HashMap<>(); 
Map<String, Map<String, Integer>> teams = new HashMap<>(); 

players.put("Podolski", 0); 
players.put("mueller", 0); 

teams.put("BayernMuc", players); 

System.out.println(players); 
System.out.println(teams); 
int goals = teams.get("BayernMuc").get("mueller"); 
teams.get("BayernMuc").put("mueller", 5); 

System.out.println(teams); 
goals = teams.get("BayernMuc").get("mueller"); 
teams.get("BayernMuc").put("mueller", ++goals); 
System.out.println(players); 
System.out.println(teams); 
関連する問題