2017-11-07 4 views
0

私はネストマップに結果セットデータをプッシュしようとしています。正直なところ、私はそれを行う方法の論理に苦労してきました。ここに私の結果セットのデータのサンプルでは、​​私はinnermapは、キーと値のリストとして対応する潜水艦としてメインCOLを握ることができると思っているハッシュマップHashMap<Integer, HashMap<String, List<String>>>を作成し、リストを含むネストされたハッシュマップに結果セットデータをプッシュ

 
ID Main Sub 
1 Root Carrots 
2 Root Beets 
3 Root Turnips 
4 Leafy Spinach 
5 Leafy Celery 
6 Fruits Apples 
7 Fruits Oranges 

です。外殻には、idとしてキーが、対応するマップには値が含まれます。私はこれを達成するために苦労しています。

ご協力いただければ幸いです。

+0

あなたの識別子が連続している場合は、外側 'HashMap'を必要としません。内側の 'HashMap'sを' ArrayList'に格納するだけです。 – Eran

+0

'HashMap 'が必要です。 –

答えて

0

以下はあなたの質問に対する回答です。しかし、問題はおそらく間違っています。 IDは一意であるので(ただの推測)あなたは、おそらくのDataObjectがvariabels mainsubを含むPOJOがある

Map<Integer, DataObject> map = new HashMap<>(); 

を探しています。このような構造にデータを追加するのは簡単です。私は別の構造を使用することをお勧めし

private Map<Integer, Map<String, List<String>>> map = new HashMap<>(); 

public static void main(String[] args) { 
    new Tester().go(); 
} 

private void go() { 
    add(1, "Root", "Carrots"); 
    add(2, "Root", "Beets"); 
    add(3, "Root", "Turnips"); 
    add(4, "Leafy", "Spinach"); 
    add(5, "Leafy", "Celery"); 
    add(6, "Fruits", "Apples"); 
    add(7, "Fruits", "Oranges"); 
} 

private void add(int id, String main, String sub) { 
    if (!map.containsKey(id)) { 
     map.put(id, new HashMap<String, List<String>>()); 
    } 
    ArrayList<String> list = new ArrayList<String>(); 
    list.add(sub); 
    map.get(id).put(main, list); 
} 
0

:質問(地図とリストがどのように機能するかをお見せするために追加された)に

回答。 あなたはユニークなIDとサブを持っていますが、メインは重複している可能性があります。 したがって、次の構造を使用することをお勧めします。 HashMap> POJOにはIDとサブがあります。 地図のキーはメインになります。

if (map.get(main)==null){ 
List<POJO> pojoList= new List<>(); 
    pojolist.add(pojo); 
}else{ 
    List<POJO> pojoList=map.get(main); 
    pojoList.add(pojo); 
} 

をしかし、あなたはIDまたはメインを使用して検索を行う必要がある場合には、最終的に依存します: は、このように簡単に行うことができます。

0

例の各行が一意であるため、ネストされたハッシュマップを作成する必要はありません(ネストされたマップの各リストは1つの値しか持たないため)。ここではどのような場合には

はあなたの特定の必要性については、Java 8のスタイルでアルゴリズムの例である:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class Main { 

    public static void main(String[] args) { 
     List<ResultSet> rows = new ArrayList<>(); 
     rows.add(new ResultSet().setId(1).setMain("Root").setSub("Carrots")); 
     rows.add(new ResultSet().setId(2).setMain("Root").setSub("Beets")); 
     rows.add(new ResultSet().setId(3).setMain("Root").setSub("Turnips")); 
     rows.add(new ResultSet().setId(4).setMain("Leafy").setSub("Spinach")); 
     rows.add(new ResultSet().setId(5).setMain("Leafy").setSub("Celery")); 
     rows.add(new ResultSet().setId(6).setMain("Fruits").setSub("Apples")); 
     rows.add(new ResultSet().setId(7).setMain("Fruits").setSub("Oranges")); 

     HashMap<Integer, HashMap<String, List<String>>> result = new HashMap<>(); 
     rows.forEach(row -> { 
      HashMap<String, List<String>> subsByMain = result.getOrDefault(row.getId(), new HashMap<>()); 
      List<String> subs = subsByMain.getOrDefault(row.getMain(), new ArrayList<>()); 
      subs.add(row.getSub()); 
      subsByMain.put(row.getMain(), subs); 
      result.put(row.getId(), subsByMain); 
     }); 
    } 


    static class ResultSet { 
     private Integer id; 
     private String main; 
     private String sub; 

     Integer getId() { 
      return id; 
     } 

     ResultSet setId(Integer id) { 
      this.id = id; 
      return this; 
     } 

     String getMain() { 
      return main; 
     } 

     ResultSet setMain(String main) { 
      this.main = main; 
      return this; 
     } 

     String getSub() { 
      return sub; 
     } 

     ResultSet setSub(String sub) { 
      this.sub = sub; 
      return this; 
     } 
    } 
} 
関連する問題