2013-05-13 11 views
19

私のhashmapは文字列を値としてキーとarraylistとして保存します。今、私はこれをリストに埋め込む必要があります。つまり、次の形式になり、次のとおりです。HashMap <String、ArrayList <String>>をリストの中に保存するにはどうすればよいですか?

List<HashMap<String, ArrayList<String>>> 

これらは私が使用している宣言されている:

Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>(); 
ArrayList<String> arraylist = new ArrayList<String>(); 
map.put(key,arraylist); 
List<String> list = new ArrayList<String>(); 

誰も私た方法とどのように私を格納続行するリストで使用するのを助けることができますそれにマップする?

+0

このフォームのマップの一覧が必要ですか? –

+0

私はあなたがjavaを使用していると仮定し、あなたの '' 'は実際に' <'であるべきです。 – CodesInChaos

+0

ええ.. java .. '<'が正しく表示されないので、私は '(' – user2376600

答えて

28

コレクションのインターフェイス参照を常に使用すると、柔軟性が増します。
以下のコードの問題点は何ですか?

List<Map<String,List<String>>> list = new ArrayList<Map<String,List<String>>>();//This is the final list you need 
Map<String, List<String>> map1 = new HashMap<String, List<String>>();//This is one instance of the map you want to store in the above list. 
List<String> arraylist1 = new ArrayList<String>(); 
arraylist1.add("Text1");//And so on.. 
map1.put("key1",arraylist1); 
//And so on... 
list.add(map1);//In this way you can add. 

上記のように簡単に行うことができます。

2

は、以下のことを試してみてください。

List<Map<String, ArrayList<String>>> mapList = 
    new ArrayList<Map<String, ArrayList<String>>>(); 
mapList.add(map); 

あなたのリストは、タイプList<HashMap<String, ArrayList<String>>>でなければならない場合は、HashMapなくMapとしてあなたmap変数を宣言します。

1

まずあなたが定義する必要がありListとして:

List<Map<String, ArrayList<String>>> list = new ArrayList<>(); 

は、ListMapを追加add(E e)メソッドを使用するには:

list.add(map); 
+1

'map'と' list'の現在の定義を考えればそれはうまくいかないでしょう –

+1

私はこれを編集しました –

13

まず、私は少しあなたの宣言を修正してみましょう:

List<Map<String, List<String>>> listOfMapOfList = 
    new HashList<Map<String, List<String>>>(); 

コンクリートクラス(HashMap)を1回だけ使用していることに注意してください。インターフェイスを使用して、後で実装を変更できるようにすることが重要です。

これで、要素をリストに追加したいのですか?要素はマップなので、作成する必要があります。

Map<String, List<String>> mapOfList = new HashMap<String, List<String>>(); 

ここでマップに値を設定します。

listOfMapOfList.add(mapOfList); 

しかし:今、我々はリストにマップを追加する準備ができている、

mapOfList.put("mykey", Arrays.asList("one", "two", "three")); 

OKを:幸いにも、あなたはそう、あなたが個別にリストを作成する必要があり、あなたのためのリストを作成するユーティリティを使用することができます。

今すぐ複雑なコレクションを作成しないようにしてください。未来について考える:内部マップを別のものに変更したり、設定するなどして、おそらく内部マップを変更する必要があります。これにより、コードの重要な部分を書き直すことになります。代わりにあなたのデータを含むクラスを定義し、1次元コレクションに追加:

のは、あなたのクラス(単なる例として)Student呼ぶことにしましょう:

Collection<Student> students = new ArrayList<Student>(); 
:今

public Student { 
    private String firstName; 
    private String lastName; 
    private int studentId; 

    private Colectiuon<String> courseworks = Collections.emtpyList(); 

    //constructors, getters, setters etc 
} 

を簡単なコレクションを定義することができます

将来的にあなたがそれを行う、キーがstudentIdあるマップにあなたの学生を配置する場合:

Map<Integer, Student> students = new HashMap<Integer, Student>(); 
+0

いいえ、あなたのコードの書式を調整してもらえませんか? –

0
class Student{ 
    //instance variable or data members. 

    Map<Integer, List<Object>> mapp = new HashMap<Integer, List<Object>>(); 
    Scanner s1 = new Scanner(System.in); 
    String name = s1.nextLine(); 
    int regno ; 
    int mark1; 
    int mark2; 
    int total; 
    List<Object> list = new ArrayList<Object>(); 
    mapp.put(regno,list); //what wrong in this part? 
    list.add(mark1); 
    list.add(mark2);** 
    //String mark2=mapp.get(regno)[2]; 
} 
+0

このコードについての説明はおそらく有益でしょう。 – Pyves

+0

はい、ありがとうございます。事実、私は上記の解決策が必要です。次の投稿では、コード全体を正しく説明します。 – James

関連する問題