2012-05-07 8 views
0

私は逆マップの新しいマップをどのように入手できますか? 私の実際の地図のようになります。私は今別のネストされたマップを含むマップを逆転する

TrueStringMap2D testmap = new TrueStringMap; 
testmap.put("Mickey Mouse","Mathematics","1.0"); 
testmap.put("Mickey Mous","Physics","1.3"); 
testmap.put("Minnie","Chemistry","2.3"); 
...... 

.. nestedMapはちょうどPUTメソッドで作成され

centralMap = new HashMap<String, Map<String, String>>(); 
nestedMap = new HashMap<String, String>(); 

と私はmainメソッドで次のように使うの要素を入れて私はnestedMapのキーをcentralMapのキーに変更したい、逆もまた同様です。数学、物理、 ..)は、学生と成績のnestedMapを持っています..私はそれをどうすればできますか?

私のTrueString2Dでクラスを作成することはできません。おそらくリスト内のcentralMapのキーと、別のListのnestedMapのキーをコピーし、新しいマップHashMap>()を作成するだけです。 (私のcentralMapと同じ)、新しいマップ(例えばnewCentralMap)のnestedMapの古いキーのリストをキーとしてコピーし、値として、newNestedMap内のcentralMapの古いキーと値をコピーしますnewNestedMapの古いマップ上のものと同じです..しかし、私はマップにリストをコピーすることができるかどうかということをやって正確にどのように知っている、といけない:S

ありがとうは

+2

HashMap<String, Map<String, String>>()を使用していない 'TrueStringMap2D'このクラスは何ですか?どのインタフェースを実装していますか? – bpgergo

+0

@bpgergo Collectionインターフェイスを実装していないと思います。 'put()'メソッドが内部マップに委譲したようです。 – Kai

+0

2次元マップ用に作成しました。通常のマップのメソッドを再定義して、各エントリのkey1、key2、およびvalueを持つマップのこれらのメソッドを取得します。私は今TrueString2Dを実装しています:-)メソッド(これはflipped()です)は、centralMapのキーをnestedMapのキーと逆にします。リストのnestedMapのkeySetもcentralMapのキーセットをコピーして、両方を逆にします新しい地図ですか?どのように私はキーを反転するこの反転()メソッドを実装する必要がありますか?私はあなたが私のエントリを置く方法を見て、あなたが問題を理解してくれることを願って。.. – ZelelB

答えて

0

は、なぜあなたは代わりにTrueStringMap2D

import java.util.HashMap; 
import java.util.Map; 

public class Flip { 


    public static Map <String, Map<String, String>> flip(Map <String, Map<String, String>> map){ 
     Map <String, Map<String, String>> result = new HashMap<String, Map<String, String>>(); 
     for (String key : map.keySet()){ 
      for (String key2 : map.get(key).keySet()){ 
       if (!result.containsKey(key2)){ 
        result.put(key2, new HashMap<String, String>()); 
       } 

       result.get(key2).put(key, map.get(key).get(key2)); 
      } 
     } 


     return result; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Map <String, Map<String, String>> map = new HashMap<String, Map<String, String>>(); 

     map.put("Mickey", new HashMap<String, String>()); 
     map.get("Mickey").put("Physics", "1.1"); 
     map.get("Mickey").put("Maths", "1.2"); 

     map.put("Minnie", new HashMap<String, String>()); 
     map.get("Minnie").put("Physics", "1.1"); 
     map.get("Minnie").put("Chemistry", "1.3"); 

     System.out.println(map); 

     System.out.println(flip(map)); 
    } 

} 

出力

{Minnie={Physics=1.1, Chemistry=1.3}, Mickey={Maths=1.2, Physics=1.1}} 
{Maths={Mickey=1.2}, Physics={Minnie=1.1, Mickey=1.1}, Chemistry={Minnie=1.3}} 
+0

ありがとうbpgergo ..しかし、フリップ()のタイプのretrunはSting2Dでなければなりません。私はインターフェイスのStringMap2Dとim implemenを実装するクラスを配置する質問を編集する必要がありますting、TrueString2D – ZelelB

+0

どうぞご覧ください。 – ZelelB

+0

1)なぜこのクラスを使用する必要がありますか? 'TrueStringMap2D'? 2)あなたが本当にそれを使用しなければならない場合は、クラスの完全なソースを投稿してください。 – bpgergo

2

使用をverymuch別の何かあなたのアイテムを格納するために:

  • グアバは、あなたが
  • を求めている機能を実装 Tableクラスを持つ
  • さらに柔軟性が必要な場合は、インメモリデータベースを検討してください。
+0

私はそれを使用することはできません..私はTrueString2Dを実装する必要があります:S – ZelelB

0

私はこのためにマップを使用しません。私はちょうどCollection<PersonGrade>を使用します。あなたは「すべての科目でのミッキーマウスのすべての等級」についてのレポートを生成したいとき

class PersonGrade { 
    String name; 
    String subject; 
    Double grade; 
} 

次にコレクションを反復し、その基準を満たすオブジェクトを取ります。 膨大な量のデータを処理する場合、これは少し遅くなる可能性があります。しかし、私は本当にそれを試してみましょう。

+0

私のTrueString2D ..でクラスを作成することはできません私はリスト内のcentralMapのキーと、別のリスト内のnestedMapのキーをコピーしてから、新しいマップを作成する必要があります。新しいマップ 'HashMap >();' )、新しく作成されたマップ(例:newCentralMap)のnestedMapの古いキーのリストをキーとしてコピーし、値として、newNestedMap内のcentralMapの古いキーをコピーし、newNestedMapの値は古いマップ上のものと同じです。しかし、私は正確にそれを行う方法を知っていませんし、私はマップ内のリストをコピーすることができます:S – ZelelB

関連する問題