前提・実現したいこと
外部ファイルから取得した情報をクラスで保持します。
以下の情報を保持するためのクラスです。
MainSubファイル
Sub.area/Main.id/Main.type
1/1/A
2/1/B
3/1/B
4/1/C
5/1/X
6/2/A
7/3/B
8/4/X
9/5/A
10/5/B
11/5/B...
1つのMain.idに複数のSub.areaがつく形です。削除データもあるので、連番とは限りません
SubSub2ファイル
Sub.area/Sub2.no/Sub2.name
1/1/佐藤
2/1/山田
3/1/高橋
4/1/鈴木
6/1/高木
7/1/吉田1
7/2/吉田2
7/3/吉田3
7/4/吉田4
9/1/小野...
MainSubと違って、複数のSub.areaの可能性があります。
両ファイルとも、1行まるまる同じデータになることはないです。
保持した後、取得するときに
・Main.idは全部取得
・Sub.areaはMain.idに紐づくものを取得(Main.id=1の場合、Sub.areaの1~5)したい
・またSub2の情報をSub.areaと紐づくもので保持したい
両ファイルとも1行ずつのデータを取得し、入れていく形になりますが、
今のままだと同じMain.idで別のSub.areaを入れたときに、上書きされるでしょうか。
最終的にやりたいのは、2つのファイルから取得したデータを、
別画面に表示するためのクラス作成です。
Javaに関しては初心者のため、アドバイスいただきたいです。よろしくお願いします。
該当のソースコード
Java
1 2public class Main{ 3 4 private int id; 5 private String type; // 6 7 Map<Integer, Sub> subMap; 8 9 public Main() 10 { 11 } 12 13 public Main(int id, String type) 14 { 15 setId(id); 16 setType(type); 17 } 18 19 // getter/setter 20} 21 22public class Sub{ 23 24 private int area; // ユニーク 25 26 Map<Integer, Sub2> sub2Map; 27 28 public Sub() 29 { 30 } 31 32 // getter/setter 33} 34 35public class Sub2{ 36 37 private int no; 38 private String name; 39 40 public Sub2() 41 { 42 } 43 44 public Sub2(int no, String name) 45 { 46 setNo(no); 47 setName(name); 48 } 49 50 // getter/setter 51} 52 53public class Root{ 54 55 private static final Root INSTANCE = new Root(); 56 private Map<Integer, Main> mainMap = new LinkedHashMap<Integer, Main>(); 57 58 // private constructor 59 60 public static Root getInstance() 61 { 62 return INSTANCE; 63 } 64 65 // Main.idの全行を取得したい 66 public Main getMain() 67 { 68 // mainMapのMain.idのみを取得 69 } 70 71 public void setMain(int id, String type) 72 { 73 Main main = mainMap.get(id); 74 if (main == null) 75 { 76 main = new Main(id, type); 77 mainMap.put(id, main); 78 } 79 } 80 81 public Sub getSub(int id) 82 { 83 for (Main main : mainMap.values()) 84 { 85 if (main.subMap.containsKey(id)) 86 { 87 return main.subMap.get(id); 88 } 89 } 90 91 return null; 92 } 93 94 public void setSub(int id, int area) 95 { 96 Main main = mainMap.get(id); 97 if (main == null) 98 { 99 main = new Main(); 100 main.setId(id); 101 main.subMap = new LinkedHashMap<Integer, Sub>(); 102 mainMap.put(id, main); 103 } 104 105 Sub sub = new Sub(); 106 sub.setArea(area); 107 main.subMap.put(id, sub); 108 } 109 110 111 // 引数はSub.areaの値 112 public Sub2 getSub2() 113 { 114 115 } 116 117 public void setSub2() 118 { 119 // ここがよくわからない 120 // 引数指定できるものはSub.area/Sub2.no/Sub2.nameのみ 121 } 122} 123
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/08 23:54